我必须模仿一种简单的汇编语言。我有一个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);
答案 0 :(得分:2)
scanf("%" SCNu8, &RAM[i])
是此案例的正确格式说明符。因为最终您正在阅读 uint8_t
类型变量。
为了取得成功,您需要包含标题<inttypes.h>
。
对于十六进制,格式说明符为SCNx8
。