gpt4 book ai didi

C - 将负 int 值打印为十六进制会产生太多字符

转载 作者:太空狗 更新时间:2023-10-29 17:09:54 26 4
gpt4 key购买 nike

在 CentOS-5 64 位上使用 gcc 4.1.2 编译。

将整数打印为两个字符的十六进制字符串:

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

int main(void)
{
int8_t iNegVar = -1;
int8_t iPosVar = 1;

printf(" int negative var is <%02X>\n", iNegVar);
printf(" int positive var is <%02X>\n", iPosVar);

return 0;
}

由于该值只有 1 个字节,我希望整数值“-1”会打印“0xFF”。但是,我得到:

 int negative var is <FFFFFFFF>
int positive var is <01>

我尝试将其抽象为一个 char* 缓冲区,以便一次打印 1 个字节。这产生了相同的结果:

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

void print_hex(void* pBuffer, uint8_t uiBufSize);
int main(void)
{
int8_t iNegVar = -1;
int8_t iPosVar = 1;

printf(" int negative var is <%02X>\n", iNegVar);
print_hex(&iNegVar, 1); //pass by reference


printf(" int positive var is <%02X>\n", iPosVar);
print_hex(&iPosVar, 1); //pass by reference

return 0;
}


void print_hex(void* pBuffer, uint8_t uiBufSize)
{
int i;
char pTmp[3]; //Holds 2-character string, plus NULL
char* pByteBuff = pBuffer; //Use char* to parse byte-by-byte

for(i = 0; i < uiBufSize; i++) //Process all bytes in buffer
{
sprintf(pTmp, "%02X", pByteBuff[i]); //store each byte as 2-character string in "pTmp"
printf(" Converted to %s!\n\n", pTmp);
}
}

打印:

int negative var is <FFFFFFFF>
Converted to FFFFFFFF!

int positive var is <01>
Converted to 01!

我想到“char”在 C 中作为整数类型实现,所以我决定尝试在“print_hex”函数中将“char* pByteBuff”更改为“unsigned char* pByteBuff” .这行得通,并且只打印了我期望的两个字符:

int negative var is <FFFFFFFF>
Converted to FF!

虽然这“解决”了我的问题,但问题仍然存在:为什么显式打印为两个字符的十六进制值会打印 8 个字符而不是指定的两个字符?

最佳答案

A int8_t将通过通常的整数提升作为可变参数函数的参数,如 printf() .这通常意味着 int8_t转换为 int .

"%X"适用于 unsigned争论。所以先转换为一些无符号类型并使用匹配的格式说明符:

对于 uint8_t , 使用 PRIX8 .对于精确宽度类型,包括 <inttypes.h>用于匹配说明符。

#include <inttypes.h>
printf(" int negative var is <%02" PRIX8 ">\n", iNegVar);`

int8_t iNegVar = -1; , 在以十六进制打印之前转换为一些无符号类型

printf(" int negative var is <%02" PRIX8 ">\n", (uint8_t) iNegVar);`

关于C - 将负 int 值打印为十六进制会产生太多字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30378633/

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