c++ - 使用 ofstream 将 uint16_t 写入二进制文件

标签 c++

我正在尝试测试将一些数据写入文件。

sixteenBitData = (uint16_t*) malloc(sizeof(uint16_t)*bufSizeX*bufSizeY);
memset(sixteenBitData, 1, sizeof(uint16_t)*bufSizeX*bufSizeY);
binfile->write((char *)&sixteenBitData, sizeof(uint16_t)*bufSizeX*bufSizeY);

如你所见,sixteenBitData是一个uint16_t的数组

我希望我的二进制文件有一堆 1,但是当我将它加载到 matlab 中时,它似乎有 0 到 65535 之间的各种数字

我做错了什么吗?

谢谢

最佳答案

1) sixteenBitData 是一个指针。当你写的时候,你获取堆栈中某处指针的地址,然后将其转换为 char*,并将那里的所有内容写入你的文件。我很惊讶它没有崩溃。

2) memset 将每个 byte 的值设置为 1。因为(我假设)uint16_t 是两个字节,所以它被设置为 0x0101,即 257。

sixteenBitData = (uint16_t*) malloc(sizeof(uint16_t)*bufSizeX*bufSizeY);
for(int i=0; i<bufSizeX*bufSizeY; ++i)
    sixteenBitData[i] = 1;  //obvious replacement here
binfile->write((char *) sixteenBitData, sizeof(uint16_t)*bufSizeX*bufSizeY);
                       ^
                       & removed 

关于c++ - 使用 ofstream 将 uint16_t 写入二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7438122/

相关文章:

c++ - vector 作为 pthread_create 的输入

c++ - NodeJS native 模块 - 如何删除调试符号

c++ - 检查派生中基类的模板参数

c++ - 比较 wstring inline 的细微差别

c++ - 与 at() 或索引相比,为什么使用 C++ 迭代器会显着增加代码大小?

C++ 编程,动态内存不能正常使用 malloc 和 calloc

c++ - 错误 C2558 - 复制构造函数

java - 何时用 256 初始化数组

c++ - 从函数返回数组并丢失其大小

c++ - boost::filesystem::path(std::wstring) 抛出异常