如何将 32 位二进制值转换为int8_t数组

How to convert 32-bit binary value to int8_t array

提问人:user16030865 提问时间:4/14/2023 最后编辑:user16030865 更新时间:4/14/2023 访问量:128

问:

我正在尝试将一个 32 位二进制值转换为int8_t数组中。我不确定如何做到这一点,我正在努力找到任何解释该过程的文档。

我以为每 8 位代表一个整数,然后这就是数组,但我不确定。

编辑:我试图表示的数字是01000011 01010000 000000000 000000000。

数组 c 数学 二进制 uint8t

评论

1赞 Fe2O3 4/14/2023
考虑使用 .union
0赞 pmacfarlane 4/14/2023
“二进制值”是什么意思?最后,所有数字都以二进制形式存储在计算机中。这是一串 和 吗?你的问题非常不清楚。你有一些代码可以分享给你的尝试吗?01
0赞 Eric Postpischil 4/14/2023
通常,在将对象分解为表示它的字节时,使用无符号类型 ( 或 ),而不是有符号类型,因为符号位存在问题,并且 C 标准中符号类型的行为规范不完整。你确定你想要,不是吗?unsigned charuint8_tint8_tuint8_t

答:

0赞 boreddad420 4/14/2023 #1

我假设您的“32 位二进制”数据是一个有符号的 32 位整数。如果是这种情况,请尝试以下操作:

uint32_t some_number = <some 32 bit signed or unsigned int>;
int8_t data[4] = { 0 };
data[0] = (int8_t)(some_number>>24);
data[1] = (int8_t)(some_number>>16);
data[2] = (int8_t)(some_number>>8);
data[3] = (int8_t)(some_number);

评论

1赞 JohnScott 4/14/2023
为什么不直接使用?memcpy()
0赞 boreddad420 4/14/2023
有效的观点,memcpy 在编译器输出方面可能会更有效,但为了简单和教育起见,我只是直接将它们分配给@JohnScott
0赞 ikegami 4/14/2023
@JohnScott、 字节顺序因系统而异。memcpy
1赞 ikegami 4/14/2023
无需使长度为 5 个字节。这不是一个字符串。data
0赞 0___________ 4/14/2023
内延性呢
0赞 0___________ 4/14/2023 #2
int8_t *conv(uint32_t num, void *buff, int endianess)
{
    uint8_t *arr = buff;

    if(endianess)
        for(int i = 0; i < sizeof(num); i++)
        {
            arr[i] = num;
            num >>= 8;
        }
    else
        for(int i = sizeof(num) - 1; i >= 0; i--)
        {
            arr[i] = num;
            num >>= 8;
        }

    return buff;
}

https://godbolt.org/z/M7YqrW1j1