Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将无符号long转换为char*,忽略高0字节_C++_Binary_Fstream - Fatal编程技术网

C++ 将无符号long转换为char*,忽略高0字节

C++ 将无符号long转换为char*,忽略高0字节,c++,binary,fstream,C++,Binary,Fstream,我有一个无符号长变量,我想把它写入一个二进制文件。但是,我需要忽略所有前导字节,它们都是零。 这意味着 unsigned long long toWrite = 4; 应该将0x04而不是0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x04写入流 #include <fstream> int main(){ std::ofstream out("test.txt", std::ios::binary); unsigned long lon

我有一个无符号长变量,我想把它写入一个二进制文件。但是,我需要忽略所有前导字节,它们都是零。 这意味着

unsigned long long toWrite = 4;
应该将0x04而不是0x00 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*的函数。但是,如果中间有0个字节,例如0x03 0x00 0xf1,那么我认为我不能将它写入流,因为0x00决定了char数组的结尾。
我在这里有点不知所措,需要一些帮助。

一种方法是使用write实现这一目标。 所以,只要改变一下:

out << cutoffZeroBytes(toWrite);
如果你想减少这个数字:

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

您可以返回字符*和长度。将字符*视为字符串只是一种约定,而不是要求。将其视为指向char数组的指针同样有效。您无法使用运算符。如果值实际为0,您希望得到什么输出?将最小值设置为单个字节,则0的问题是solved@J3STER对但这并不是问题所说的。@J3STER我认为山姆的答案是合理的。这将如何切断任何领先的0?我认为这不会改变我试图说明的要点。我不是在做作业,我是在指导我认为您可以从这里开始合理地调整它。一种更可移植且不依赖于尾数的方法是隔离最低有效字节:uint8\u t byte=uint8\u ttoWrite&0xFFU;out.write&字节,1;如果toWrite小于1字节,这可能是一个很好的解决方案。但它不是一般性的。
char* start = (char*)&toWrite;
int pi = sizeof(toWrite);
for (; pi > 0; pi--, start++)
    if (*start)
        break;
out.write(start, pi);