我正在尝试使用以下代码修改我的结构的一个字节:
struct example *dev;
PRINT_OPAQUE_STRUCT(dev);
sprintf((char*) dev + 24, "%x",1);
PRINT_OPAQUE_STRUCT(dev);
PRINT_OPAQUE_STRUCT 只是打印结构的内容,并在其他主题中定义: Print a struct in C
这个程序的输出是:
d046f64f20b3fb4f00000000e047f64f00000000ffffffff000000 d046f64f20b3fb4f00000000e047f64f00000000ffffffff310000
我不知道为什么我写的是值“31”而不是我想要的值“01”。我试图用“%01x”替换 sprintf 的第二个参数,但它没有改变任何东西。谁知道为什么?
谢谢!
最佳答案
好吧,您正在将值 1
格式化为字符串。这就是 sprintf
所做的。 0x31
是字符 '1'
的字符代码。如果您只想将字节值 0x01
写入您的结构,则不需要 sprintf
。只需这样做:
*((char*)dev + 24) = 1;
或(相同,但语法略有不同):
((char*)dev)[24] = 1;
另请注意,如 one comment below说,sprintf
不会只写一个字节。因为它写入一个字符串,而 C 字符串以 null 结尾,它还会在 ' 之后写入一个空字符 (
.'\0'
, 0x00
) 1'
关于c - 在结构变量中写入一个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40871166/