繁体   English   中英

将unsigned long转换为char *,而忽略高0字节

[英]Convert unsigned long to char*, disregard high 0 bytes

我有一个无符号的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数组的结尾。 我在这里有点笨,需要一些帮助。

一种方法是将写入用于此目的。 因此,只需更改:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM