读取包含未签名INT的文件,然后将其写入C 中的二进制文件
Read a file containing unsigned ints and write it into binary in C++
我有一个文本文件,其中包含范围0,..,2^32-1中的无符号整数。每行包含一个整数(和一个newline char)。
我想将其写入二进制文件中以节省空间(因此每个int将完全需要4个字节)。最好的方法是什么?
我尝试了一些选择,似乎没有一个。帮助您将不胜感激。
当前(非工作)代码:
#include <fstream>
#include <iostream>
#include <stdio.h>
int main(){
int x;
while (std::cin >> x){
fwrite((void*)&x, sizeof(x), 1, stdout);
}
return 0;
}
它是使用: g++ compress.cc -o compress
。
但是,它似乎仅输出第一个整数。
例如,让i RAN命令./compress < bla | wc -c
其中" bla"是一个包含
的文件1864754174
2150244390
1703231727
命令的结果是4
,而不是我预期的12
。
您的问题是您正在尝试编写int而不是unsigned int。这两个之间的差异不是它们的大小,而是字节的使用。
在未签名的int中,每位reprsent 2^(index -1)索引从1。
开始在int中,钻头像无知的int一样使用,只有最后一个位用于代表您可以表示较小数字的数字和beacuse的迹象。
如果我正确理解了您,则要从包含UINT的文本文件中读取并将其写入二进制文件中。阅读:
std::vector<unsigned int> readUints(const std::string& filepath){
std::vector<unsigned int> numbers;
std::ifstream file(filepath);
if(!file.is_open()){
//Handle file not found
}
unsigned int number = 0;
while(file >> number){
numbers.push_back(number);
}
return numbers;
写作:
void writeUints(const std::vector<unsigned int>& numbers, const std::string& filepath){
std::ofstream file(filepath, ios_base::binary | ios_base::out);
if(!file.is_open()){
//Handle file not found
}
for(int i = 0; i < numbers.size(); i++){
file.write(reinterpret_cast<char*>(&numbers[i], 4);
}
}
确保包括<fstream>
。您可以将unsigned int
更改为uint32_t
,以确保每个平台上的宽度均匀
相关文章:
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 包含iostream导致不同的二进制文件
- 从包含 IP 标头片段的二进制文件中读取结构的最佳方法是什么
- Python API用于解析包含数组格式的protobuf数据的二进制文件
- 在兼容的二进制文件中包含 CSV 文件
- 如何减少编译时间:在包含未触及的头文件的情况下
- 如何从二进制文件安装 memcached 并包含在 c 文件中
- FlatBuffers:未支撑的工会向量错误将JSON文件转换为二进制文件
- 我正在尝试读取一个包含字符串和整数的二进制文件..并打印出与字符串对应的整数
- CMake 包含错误(找不到文件、未定义引用)
- 从二进制文件中读取未签名的长整型文件
- 读取包含未签名INT的文件,然后将其写入C 中的二进制文件
- C 类文件未在Linux OS上运行的Eclipse Mars中构建二进制文件
- 未找到 Eclipse 和 CDT 二进制文件
- 未显式引用对象的全局对象构造函数在最终二进制文件 - LD 中被丢弃
- 如何在二进制文件中包含共享库依赖项(不使用.deb或.rpm)和/或针对PulseAudio的静态链接
- 将包含另一个向量的结构向量写入二进制文件
- C++ - 如何编写和读取包含对象的结构?(写入和读取二进制文件)
- ODB:在公共声明中包含 *.hxx 文件时未解决的外部符号错误