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