gpt4 book ai didi

c++ - 将 unsigned long 转换为 char*,忽略高 0 字节

转载 作者:行者123 更新时间:2023-11-28 05:18:42 33 4
gpt4 key购买 nike

我有一个 unsigned long long 变量,我想将其写入二进制文件。但是,我需要忽略所有为零的前导字节。
这意味着

unsigned long long toWrite = 4;

应该将 0x04 而不是 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x04 写入流。

#include <fstream>
int main(){
std::ofstream out("test.txt", std::ios::binary);
unsigned long long toWrite = 4;
out << cutoffZeroBytes(toWrite);
out.close();
return 1;
}

我正在考虑让 cutoffZeroBytes 成为一个返回 char* 的函数。但是如果中间有零个字节(例如 0x03 0x00 0xf1),那么我想我不能将它写入流,因为 0x00 确定 char 数组的结尾。我在这里有点无能为力,需要一些帮助。

最佳答案

一种方法是为此目的使用 write。所以,只需更改:

out << cutoffZeroBytes(toWrite);

到:

out.write((char*)&toWrite, sizeof(toWrite));

如果你想减少这个数字:

char* start = (char*)&toWrite;
int pi = sizeof(toWrite);
for (; pi > 0; pi--, start++)
if (*start)
break;
out.write(start, pi);

关于c++ - 将 unsigned long 转换为 char*,忽略高 0 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41990628/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com