c - 在结构变量中写入一个字节

标签 c

我正在尝试使用以下代码修改我的结构的一个字节:

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/

相关文章:

c - 使用额外引用和取消引用进行转换时的行为

C:比较hash值好像消失了

c - 这段代码是否存在某种安全问题?

c - 运行 mpirun 时数据类型无效

C : explain theory behind

c - OpenGL 加载多个纹理 - 不工作

c - 在处理 C 中的指针时无法理解代码的输出

c - C中的最大数字数据类型

c - 错误 : "Transport endpoint is already connected"

c - 取消引用指向另一个指针的空指针