scanf十六进制到u中的uint8_t [复制]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我必须模拟一种简单的汇编语言。我有一个256字节的内存,我选择用uint8_t表(因为它们是字节)来表示:RAM[256]

我的问题是我需要以十六进制输入代码,所以我有如下行:

scanf("%02X", &RAM [arg]);

要么

scanf("%02X", &RAM[RAM[arg]]);

取决于间接的级别。

这不仅会产生警告:

格式'%X'需要'unsigned int *'类型的参数,但参数2的类型为'uint8_t * {aka unsigned char *}'

但它也在我的RAM中一次“擦除”4个字节。我想%02X格式不是正确的选择,但我找不到任何其他方式输入十六进制。

scanf("%" SCNx8, size);工作正常,但现在我必须从文件中读取代码,文件再次以十六进制表示,所有值都以空格或换行符分隔。

我尝试了lu = fscanf(prog, "%" SCNx8, size);,但现在我收到以下警告:

格式'%hhx'需要'unsigned char *'类型的参数,但参数3的类型为'int'[-Wformat =]

lu = fscanf(prog, "%" SCNx8, size);
c hex scanf
1个回答
2
投票

scanf("%" SCNu8, &RAM[i])是本案例的正确格式说明符。因为最终你正在阅读uint8_t类型变量。

为了成功,您需要包含标题<inttypes.h>

对于十六进制,格式说明符将为SCNx8

© www.soinside.com 2019 - 2024. All rights reserved.