Windows下如何向文件末尾写入DWORD类型数值
解决DWORD数值以二进制4字节写入文件的问题
直接传递DWORD变量的地址给WriteFile即可,因为WriteFile的第二个参数LPCVOID本质是指向数据的常量指针,你需要提供要写入数据的内存起始地址,而非直接传递数值。
正确代码示例
DWORD size = 12314432; DWORD bytesWritten; // 建议保留该变量,用于校验实际写入的字节数 BOOL ret = WriteFile(hFile, &size, sizeof(DWORD), &bytesWritten, NULL);
为什么之前的方法不对?
你用sprintf把数值转成了ASCII字符串,写入的是每个数字字符的ASCII编码(比如1234会被转成字符串"1234",对应的十六进制是31 32 33 34),这是文本形式的存储,并非数值的二进制表示。
额外说明
Windows系统默认是小端字节序,所以写入的4字节会按低字节在前的顺序存储。如果需要大端字节序(比如跨平台兼容),可以手动拆分字节:
DWORD size = 12314432; unsigned char bytes[4] = { (unsigned char)((size >> 24) & 0xFF), // 高字节 (unsigned char)((size >> 16) & 0xFF), (unsigned char)((size >> 8) & 0xFF), (unsigned char)(size & 0xFF) // 低字节 }; DWORD bytesWritten; BOOL ret = WriteFile(hFile, bytes, sizeof(bytes), &bytesWritten, NULL);
内容的提问来源于stack exchange,提问作者gmalesux111
相关产品推荐
相关产品推荐

