C语言 | 您所在的位置:网站首页 › c语言如何读取某地址中数据 › C语言 |
题目:获取0x12345678各个字节。 方法一:结构&联合 /* 微信公众号:嵌入式大杂烩 */ #include typedef unsigned int uint32_t; typedef unsigned char uint8_t; union bit32_data { uint32_t data; struct { uint8_t byte0; uint8_t byte1; uint8_t byte2; uint8_t byte3; }byte; }; int main(void) { union bit32_data num; num.data = 0x12345678; printf("byte0 = 0x%x\n", num.byte.byte0); printf("byte1 = 0x%x\n", num.byte.byte1); printf("byte2 = 0x%x\n", num.byte.byte2); printf("byte3 = 0x%x\n", num.byte.byte3); return 0; }运行结果: 这种方法的缺点是:会受到大小端的影响。只有在明确大小端的情况下可稍微用一用。以上是小端模式下的运行结果。 结构&联合法不仅仅是在获取数据各个字节有用,在数据协议、数据位拆分等方面很实用,之后再做更详细的分享。大小端推荐文章:《CPU 的大小端模式?》 方法二:移位操作 /* 微信公众号:嵌入式大杂烩 */ #include #define GET_LOW_BYTE0(x) ((x >> 0) & 0x000000ff) /* 获取第0个字节 */ #define GET_LOW_BYTE1(x) ((x >> 8) & 0x000000ff) /* 获取第1个字节 */ #define GET_LOW_BYTE2(x) ((x >> 16) & 0x000000ff) /* 获取第2个字节 */ #define GET_LOW_BYTE3(x) ((x >> 24) & 0x000000ff) /* 获取第3个字节 */ int main(void) { unsigned int a = 0x12345678; printf("byte0 = 0x%x\n", GET_LOW_BYTE0(a)); printf("byte1 = 0x%x\n", GET_LOW_BYTE1(a)); printf("byte2 = 0x%x\n", GET_LOW_BYTE2(a)); printf("byte3 = 0x%x\n", GET_LOW_BYTE3(a)); return 0; }运行结果: 这也是获取数据各个字节的最常用也最有效的方法。这种类似的位操作在嵌入式方面应用得很多,比如在LCD操作中表示像素颜色值、FLASH的操作等方面都有用到。位操作推荐文章:《C语言、嵌入式位操作精华技巧大汇总》 最后以上就是本次的分享,如果觉得文章不错,转发、在看,也是我们继续更新的动力。 猜你喜欢: 嵌入式大杂烩读者福利:第二期 2020年精选原创笔记汇总 干货 | protobuf-c之嵌入式平台使用 1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!
|
CopyRight 2018-2019 实验室设备网 版权所有 |