gpt4 book ai didi

c - int 到十六进制的转换不适用于高值 225943 正在转换为 0x000372ffffff97

转载 作者:行者123 更新时间:2023-12-04 07:32:49 28 4
gpt4 key购买 nike

我的 C 程序采用随机 int 高值并将其转换为十六进制并将其写入文件。如果该值等于或小于 225919,则一切顺利例如。 225875 是 00 03 72 53但是如果该值高于 225919,它将开始为十六进制值示例 885943 中的最后一个字节写入额外的 ffffff00 03 72 ffffff97,而正确的值应该是 00 03 72 97

将值写入文件的代码如下:

char *temp = NULL;
int cze = 225943;
temp = (char *)(&cze);
for (ii = 3; ii >= 0; ii--) {
printf(" %02x ", temp[ii]); //just for printing the values
fprintf(in, "%02x", temp[ii]);
}

输出为:00 03 72 ffffff97

预期输出:00 03 72 97

请帮忙,任何指点都会受到赞赏。

最佳答案

您的 temp 数组包含 char 值,在大多数情况下意味着 signed char。然后,这些值将被打印为有符号 char,因此任何大于 0x7f 的字节都被视为负值。当该值传递给 printf 时,它会隐式转换为 int。如果数字为负数,则会添加一个或多个包含所有 1 位的字节。

将数据类型更改为unsigned char。这将导致隐式提升更改为 unsigned int 并且您将获得正确的值。

unsigned char *temp=NULL;
int cze=225943;
temp=(unsigned char *)(&cze);
for(ii=3;ii>=0;ii--){
printf(" %02x ",temp[ii] );//just for printing the values
fprintf(in,"%02x",temp[ii]);
}

或者,您可以在 printf 中使用 hh 长度修饰符,它告诉它参数是 charunsigned字符。这会将其限制为打印 1 个字节的数据。

printf(" %02hhx ",temp[ii] );

关于c - int 到十六进制的转换不适用于高值 225943 正在转换为 0x000372ffffff97,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40846031/

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