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

时间:2017-02-01 22:02:26

标签: c++ binary fstream

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

1 个答案:

答案 0 :(得分:1)

一种方法是使用write来达到这个目的。 所以,只需改变:

jaxrpc.jar
saaj.jar
commons-discovery.jar
commons-logging.jar
wsdl4j.jar or orawsdl.jar
xercesImpl.jar
mail.jar
activation.jar

为:

out << cutoffZeroBytes(toWrite);

如果你想减少这个数字:

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