gpt4 book ai didi

将 int 转换为 4 字节 char 数组 (C)

转载 作者:太空狗 更新时间:2023-10-29 16:16:20 25 4
gpt4 key购买 nike

嘿,我想将用户输入的 int 转换为 4 个字节,然后分配给字符数组。如何做到这一点?

例子:

将用户输入的 175 转换为

00000000 00000000 00000000 10101111


到目前为止所有的答案都存在问题,转换 255 应该导致 0 0 0 ff 尽管它打印为:0 0 0 ffffffff

unsigned int value = 255;   

buffer[0] = (value >> 24) & 0xFF;
buffer[1] = (value >> 16) & 0xFF;
buffer[2] = (value >> 8) & 0xFF;
buffer[3] = value & 0xFF;

union {
unsigned int integer;
unsigned char byte[4];
} temp32bitint;

temp32bitint.integer = value;
buffer[8] = temp32bitint.byte[3];
buffer[9] = temp32bitint.byte[2];
buffer[10] = temp32bitint.byte[1];
buffer[11] = temp32bitint.byte[0];

两者的结果都是 0 0 0 ffffffff 而不是 0 0 0 ff

另一个例子是 175,因为输入输出为 0, 0, 0, ffffffaf 而它应该只是 0, 0, 0, af

最佳答案

执行此操作的可移植方法(确保您到处都得到 0x00 0x00 0x00 0xaf)是使用轮类:

unsigned char bytes[4];
unsigned long n = 175;

bytes[0] = (n >> 24) & 0xFF;
bytes[1] = (n >> 16) & 0xFF;
bytes[2] = (n >> 8) & 0xFF;
bytes[3] = n & 0xFF;

使用union和memcpy()的方法在不同的机器上会得到不同的结果。


您遇到的问题是打印而不是转换。我假设您使用的是 char 而不是 unsigned char,并且您正在使用这样的行来打印它:

printf("%x %x %x %x\n", bytes[0], bytes[1], bytes[2], bytes[3]);

当任何小于 int 的类型被传递给 printf 时,它们被提升为 int(或 unsigned int,如果 int 不能容纳原始类型的所有值)。如果 char 在您的平台上签名,则 0xff 可能不适合该类型的范围,而是被设置为 -1(表示为 0xff 在 2s 补码机上)。

-1 被提升为 int,并且在您的机器上将 0xffffffff 表示为 int,这就是您所看到的.

您的解决方案是要么实际使用 unsigned char,要么在 printf 语句中转换为 unsigned char:

printf("%x %x %x %x\n", (unsigned char)bytes[0],
(unsigned char)bytes[1],
(unsigned char)bytes[2],
(unsigned char)bytes[3]);

关于将 int 转换为 4 字节 char 数组 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3784263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com