第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C宏定義確定大端或小端機?

C宏定義確定大端或小端機?

C
慕桂英546537 2019-08-09 16:35:09
C宏定義確定大端或小端機?是否有一行宏定義來確定機器的字節(jié)順序。我使用以下代碼,但將其轉(zhuǎn)換為宏將太長。unsigned char test_endian( void ){     int test_var = 1;     unsigned char test_endian* = (unsigned char*)&test_var;     return (test_endian[0] == NULL);}
查看完整描述

3 回答

?
慕妹3242003

TA貢獻1824條經(jīng)驗 獲得超6個贊

支持任意字節(jié)順序的代碼,準備放入一個名為的文件中order32.h

#ifndef ORDER32_H#define ORDER32_H#include <limits.h>#include <stdint.h>#if CHAR_BIT != 8#error "unsupported char size"#endifenum{
    O32_LITTLE_ENDIAN = 0x03020100ul,
    O32_BIG_ENDIAN = 0x00010203ul,
    O32_PDP_ENDIAN = 0x01000302ul,      /* DEC PDP-11 (aka ENDIAN_LITTLE_WORD) */
    O32_HONEYWELL_ENDIAN = 0x02030001ul /* Honeywell 316 (aka ENDIAN_BIG_WORD) */};static const union { unsigned char bytes[4]; uint32_t value; } o32_host_order =
    { { 0, 1, 2, 3 } };#define O32_HOST_ORDER (o32_host_order.value)#endif

您將檢查通過的小端系統(tǒng)

O32_HOST_ORDER == O32_LITTLE_ENDIAN


查看完整回答
反對 回復 2019-08-09
?
至尊寶的傳說

TA貢獻1789條經(jīng)驗 獲得超10個贊

如果您有一個支持C99復合文字的編譯器:

#define IS_BIG_ENDIAN (!*(unsigned char *)&(uint16_t){1})

要么:

#define IS_BIG_ENDIAN (!(union { uint16_t u16; unsigned char c; }){ .u16 = 1 }.c)

通常,您應該嘗試編寫不依賴于主機平臺的字節(jié)順序的代碼。


與host-endianness無關(guān)的實現(xiàn)示例ntohl()

uint32_t ntohl(uint32_t n){
    unsigned char *np = (unsigned char *)&n;

    return ((uint32_t)np[0] << 24) |
        ((uint32_t)np[1] << 16) |
        ((uint32_t)np[2] << 8) |
        (uint32_t)np[3];}


查看完整回答
反對 回復 2019-08-09
  • 3 回答
  • 0 關(guān)注
  • 829 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號