如何在C中将整数值转换为无符号char uint8_t [已关闭]

laik7k3q  于 2023-05-28  发布在  其他
关注(0)|答案(2)|浏览(160)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

昨天关门了。
Improve this question
我有一个unsigned char变量和一个integer变量。

uint8_t device[8];
int x = 4;
device[0] = x;

我必须将x值转移到设备变量。
如何将int转换为unsigned char uint8_t?

eyh26e7m

eyh26e7m1#

如果你想要一个整数类型的二进制表示,你需要把它复制到uint8_t缓冲区。
您还需要知道目标系统的字节序。

uint8_t *touint8t(const int val, uint8_t *buff, const int e)
{
    unsigned int wrk = val;
    for(int index = e ? (sizeof(val) - 1) : 0; e ? index >= 0 : index < sizeof(val); index += e ? -1 : 1) 
    {
        buff[index] = wrk & 0xff;
        wrk >>= 8;
    }
    return buff;
}
tzdcorbm

tzdcorbm2#

从你不清楚的问题来看,我猜你想使用union

#include <stdio.h>
#include <stdint.h>

int main(void) {
    union {
        int x;
        uint8_t device[ sizeof(int) ];
    } foo;
    
    foo.x = 1234; // Set the Integer Field
    
    for( int i=0; i < sizeof(int); ++i)
    {
        printf("Byte %d is : 0x%02X\n", i, foo.device[i] );
        // Print the Byte-Array Field
    }
    
    return 0;
}

变量foo可以解释为4字节整数(通过字段x),也可以解释为unsigned char值的4字节数组(通过字段device

输出:

Byte 0 is : 0xD2
Byte 1 is : 0x04
Byte 2 is : 0x00
Byte 3 is : 0x00

因为整数0x04D2(十六进制)是1234(十进制)

相关问题