對一個整數(shù),怎么取每字節(jié)表示的整數(shù)的值呢?C語言可以用如下方法:
- 整數(shù)除法
- 移位操作
- 聯(lián)合體(union)
- 指針
其中,后兩種方法是C特有的。下面是這兩種的方法的演示
使用聯(lián)合體
#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;
}
這種方法不僅方便操作字節(jié),通過C語言的位段(bit-field),我們可以方便的操作幾位(bit)二進(jìn)制。
使用指針
#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;
}
通過更改指針類型,可方便訪問整數(shù),我前面的文章類似qsort支持多數(shù)據(jù)類型的C語言排序就用到了這種思想。