優(yōu)雅的C語言之字節(jié)操作

對一個整數(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語言排序就用到了這種思想。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容