【问题标题】:How to use define to generate a byte array from int? [duplicate]如何使用define从int生成字节数组? [复制]
【发布时间】:2015-09-02 03:50:30
【问题描述】:

我想使用定义从int 中获取 4 个字节。我应该如何写这个定义?

int k = 4;
unsigned char byteK[4];

byteK[0] = (unsigned char)k & 0xFF;
byteK[1] = (unsigned char)((k >> 8) & 0xFF);
byteK[2] = (unsigned char)((k >> 16) & 0xFF);
byteK[3] = (unsigned char)((k >> 24) & 0xFF);

【问题讨论】:

    标签: c


    【解决方案1】:

    你的意思是这样的吗(假设你机器上的int真的是4个字节):

    #define INT_TO_4BYTE_ARRAY(int_var) ((unsigned char *)(&int_var))
    

    然后你可以像这样使用它:

    int new_var = 0x11223344;
    
    unsigned char byte0 = INT_TO_4BYTE_ARRAY(new_var)[0];
    unsigned char byte1 = INT_TO_4BYTE_ARRAY(new_var)[1];
    unsigned char byte2 = INT_TO_4BYTE_ARRAY(new_var)[2];
    unsigned char byte3 = INT_TO_4BYTE_ARRAY(new_var)[3];
    

    在我的机器上 (little endian) 我得到:

    byte0=0x44 byte1=0x33 byte2=0x22 byte3=0x11

    【讨论】:

    • 请记住,您需要为此编写两个(或更多)版本,一个用于目标平台的每个字节序。
    • @TobySpeight,不是我,而是@KenChu。每个字节序有两个,sizeof(int) == 2 一个,sizeof(int)==4 一个。但是如果他需要它来完成一些不是产品或不会移植到其他平台的本地任务,那么他可能只使用一个工作版本。
    • 非常感谢,Alex Lop。这就是我需要的。但如果可能是#define INT32_TO_4BYTE_ARRAY(int_var) {},则返回一个无符号字符数组[4],如无符号字符 *temp = INT32_TO_4BYTE_ARRAY(int_var),然后我可以从 temp 中获取字节值
    • @KenChu,对不起,你能澄清一下你到底想定义什么吗?
    • @Alex Lop。比如 unsigned char *temp = INT32_TO_4BYTE_ARRAY(int_var),然后 temp[0] = 0x44, temp[1] = 0x33, ....
    猜你喜欢
    • 2023-03-16
    • 2021-07-21
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2014-05-21
    • 2022-01-23
    相关资源
    最近更新 更多