提问人:user16030865 提问时间:4/14/2023 最后编辑:user16030865 更新时间:4/14/2023 访问量:128
如何将 32 位二进制值转换为int8_t数组
How to convert 32-bit binary value to int8_t array
问:
我正在尝试将一个 32 位二进制值转换为int8_t数组中。我不确定如何做到这一点,我正在努力找到任何解释该过程的文档。
我以为每 8 位代表一个整数,然后这就是数组,但我不确定。
编辑:我试图表示的数字是01000011 01010000 000000000 000000000。
答:
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;
}
评论
union
0
1
unsigned char
uint8_t
int8_t
uint8_t