C-将十六进制字符串转换为Int(全部为8位)



我正在尝试将十六进制字符串转换为int(仍然是十六进制(。我让它工作,但有一个问题。如果我输入字符串"0";00000001";结果是0x1。然而,我的函数需要完整的8位值,直到1。如何做到这一点?

我确实在StackOverflow上看到了一个例子,但它是针对C#的,而不是C或C++。

输入:

Enter the memory address you want to dump from (EG: 0xABC00000)
address? >> 0x00000001
serial_buffer = 00000001
memory_address = "0x1"

代码:

unsigned int memory_address = 0xABC00000;
static char serial_buffer[30]; // plenty of room
memory_address = strtoul(serial_buffer, NULL, 16); // convert it
printf("serial_buffer = %s", serial_buffer);
printf("memory_address = "0x%X" bytes", memory_address);
// this is done in a loop (not part of this example)
serial_buffer[i++] = key_code; // add char into serial_buffer
putchar(key_code); // echo back the typed char

如果我注释掉memory_address = strtoul(serial_buffer, NULL, 16);,我将从printf得到正确的值作为memory_address = "0xABC00000"

如果我把memory_address = strtoul(serial_buffer, NULL, 16);放回,我从printf得到一个值0x1(但我希望它是0x00000001(。

我从printf得到一个值0x1(但我希望它是0x00000001(。

如果要使用8位数字显示值,请指定最小字段宽度修饰符,并指定0以用零填充字段。

printf("%08X", memory_address);

您可以在https://en.cppreference.com/w/c/io/fprintf。

请注意,0x10x00000001是完全相同的数字,以不同的方式表示

注意:int至少为16位,并且可能小于32位,strtoul返回unsigned long。要打印unsigned long,请使用%lX格式说明符。

为什么不直接使用sscanf(不要与scanf混淆(它需要输入字符串、格式化字符串和输出:

int size;
char buffer[30];
/*...*/
sscanf(buffer, "0x%x", &size);

此处为sscanf信息

此处格式化

最新更新