对一个整数,怎么取每字节表示的整数的值呢?C语言可以用如下方法:
- 整数除法
- 移位操作
- 联合体(union)
- 指针
其中,后两种方法是C特有的。下面是这两种的方法的演示
使用联合体
#include <stdio.h>
#include <stdint.h>
int main(int argc, const char * argv[]) {
union {
uint16_t i;
char byte[2];
} u;
u.i = 0x0102;
if (u.byte[0] == 1 && u.byte[1] == 2) {
printf("big-endian\n");
} else {
printf("little-endian\n");
}
return 0;
}
这种方法不仅方便操作字节,通过C语言的位段(bit-field),我们可以方便的操作几位(bit)二进制。
使用指针
#include <stdio.h>
#include <stdint.h>
int main() {
uint16_t i = 0x0102;
char *p = (char *)(&i);
if (*p == 1 && *(p + 1) == 2) {
printf("big-endian\n");
} else {
printf("little-endian\n");
}
return 0;
}
通过更改指针类型,可方便访问整数,我前面的文章类似qsort支持多数据类型的C语言排序就用到了这种思想。
网友评论