首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用fstream方法读取二进制数据

用fstream方法读取二进制数据
EN

Stack Overflow用户
提问于 2013-11-23 21:45:26
回答 3查看 629关注 0票数 2

我需要将二进制数据读取到缓冲区,但是在fstreams中,我已经将函数读取数据到char缓冲区中,所以我的问题是:

如何将二进制数据传输/转换到无符号字符缓冲区中,在这种情况下是否是最佳解决方案?

示例

代码语言:javascript
运行
复制
  char data[54];
  unsigned char uData[54];
  fstream file(someFilename,ios::in | ios::binary);
  file.read(data,54);
  // There to transport **char** data into **unsigned char** data (?)
  // How to?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-23 21:47:28

首先,将其读入未签名的char数据。

代码语言:javascript
运行
复制
unsigned char uData[54];
fstream file(someFilename,ios::in | ios::binary);
file.read((char*)uData, 54);

演员阵容是必要的,但无害。

票数 4
EN

Stack Overflow用户

发布于 2013-11-23 21:47:27

您不需要声明额外的数组uData。可以简单地将数据数组转换为无签名:

代码语言:javascript
运行
复制
unsigned char* uData = reinterpret_cast<unsigned char*>(data);

当访问uData时,指示编译器解释不同的数据,例如,data3 == -1,意思是uData3 == 255。

票数 2
EN

Stack Overflow用户

发布于 2013-11-23 21:48:35

你可以用

代码语言:javascript
运行
复制
std::copy(data, data + n, uData);

其中n是从file.read(data, 54)返回的结果。我认为,特别是对于char*unsigned char*,您也可以移植地使用

代码语言:javascript
运行
复制
std::streamsize n = file.read(reinterpret_cast<char*>(uData));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20168313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档