對(duì)一個(gè)整數(shù)蜻韭,怎么取每字節(jié)表示的整數(shù)的值呢押框?C語(yǔ)言可以用如下方法:
- 整數(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é)泡仗,通過(guò)C語(yǔ)言的位段(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;
}
通過(guò)更改指針類型牲蜀,可方便訪問(wèn)整數(shù),我前面的文章類似qsort支持多數(shù)據(jù)類型的C語(yǔ)言排序就用到了這種思想除秀。