C语言中从十六进制到uint8的扫描
我必须模仿一种简单的汇编语言。我有一个256字节的内存,我选择用C语言中从十六进制到uint8的扫描,c,hex,scanf,C,Hex,Scanf,我必须模仿一种简单的汇编语言。我有一个256字节的内存,我选择用uint8\u t表来表示(因为它们是字节):RAM[256] 我的问题是,我需要以十六进制输入代码,因此我有如下行: scanf("%02X", &RAM [arg]); 或 取决于间接寻址的级别 这不仅会产生警告: 格式“%X”要求参数类型为“unsigned int*”,但参数2的类型为“uint8_t*{aka unsigned char*}” 但它也会在我的RAM中一次“擦除”4个字节。 我想
uint8\u t
表来表示(因为它们是字节):RAM[256]
我的问题是,我需要以十六进制输入代码,因此我有如下行:
scanf("%02X", &RAM [arg]);
或
取决于间接寻址的级别
这不仅会产生警告:
格式“%X”要求参数类型为“unsigned int*”,但参数2的类型为“uint8_t*{aka unsigned char*}”
但它也会在我的RAM中一次“擦除”4个字节。
我想%02X格式在这里不是正确的选择,但我找不到任何其他输入十六进制的方法
scanf(“%”SCNx8,大小)代码>工作正常,但现在我必须从文件中读取代码,文件又是十六进制的,所有值都用空格或换行符分隔
我尝试了lu=fscanf(prog,“%”SCNx8,大小)代码>但我现在收到以下警告:
格式“%hhx”要求参数类型为“unsigned char*”,但参数3的类型为“int”[-Wformat=]
lu = fscanf(prog, "%" SCNx8, size);
这种情况下正确的格式说明符是:
scanf("%" SCNu8, &RAM[i])
因为最终您正在读取一个uint8\t
类型变量
要使此操作成功,您需要包含标题
对于十六进制,格式说明符将是SCNx8
注意uint8\u t
在C标准中不是字节,而是char
是字节。(但是如果你的模拟系统说8位是字节的大小,unit8\u t
是一种很好的类型)@Stargateur好吧,uint8\u t
是一个字节,如果它存在的话。除了小写的u
你会用x
@AnttiHaapala替换它,那么字节总是8位吗?这在C标准中是错误的,字节是字符位,不能小于8uint8\u t
是一个八位字节而不是一个字节。我说过:只要它存在,uint8\u t
就是一个字节。我并没有说一个字节总是8位。感谢您的回答,我尝试了两种方法:scanf(“%”SCNx8,&RAM[I])和scanf(“%SCNx8”,&RAM[I]),无论哪种方法,我都会收到警告:第一种:警告:格式中的伪尾随“%”,第二种:格式“%S”要求参数类型为“wchar\u t*”,但参数2的类型为“uint8\t*”{aka unsigned char*}@Tchae.:include header?类型也是uint8_t
?第一个是正确的。第二个是错误的。我的包含如下所示:#include#include#include#include#我使用GCC-wall完整警告实际上是:cx25.0.c:127:10:警告:格式为[-Wformat=]的虚假“%”scanf(“%”,SCNx8,&RAM[arg]);^cx25.0.c:127:10:警告:格式[-Wformat extra args]@Tchae的参数太多:这将是scanf(“%”SCNx8,&RAM[arg]);
没有逗号。
scanf("%" SCNu8, &RAM[i])