【问题标题】:Collecting bit data from file从文件中收集位数据
【发布时间】:2011-02-02 14:30:15
【问题描述】:

我有一个二进制数据的向量,我需要将其逐位写入二进制文件(我知道字节必须是 8 的倍数,假设是这样)。然后我需要将该数据重新读回向量。我很难让它发挥作用。

数据必须在向量中开始和结束。请如果有人可以建议简单的语法来实现这一点,那将是一个巨大的帮助。

【问题讨论】:

  • 但是你昨天已经在stackoverflow.com/questions/4861898/…问过这个问题。
  • 是的,我基本上想将整个向量数据复制到一个文件中,然后重新收集它(它包含一个霍夫曼编码的数据)。昨天我设法用小代码实现了这个工作,遵循这里courses.cs.vt.edu/~cs2604/fall02/binio.html中给出的“读取和写入复杂数据”的内容,但在主程序中不起作用,给了我错误。您可以查看我的其他帖子。
  • @Drew C:看看我的答案,告诉我问题到底是什么......
  • @Drew C:顺便问一下,这是作业吗?
  • 有点,这是练习的一部分。我通常用 fortran 编程来计算东西,所以对 c++ 和内存管理来说是新的。位集的大小是否有限制?你能在程序中间定义bitset大小吗?

标签: c++ binary bit


【解决方案1】:

最简单的方法是使用std::bitset。它有一个构造函数和一个 to_ulong 成员,可用于进行转换。然后你只需要将大小为 8 的向量转换为位集,反之亦然。请注意位存储在您的向量中的顺序以及字节顺序(如果它适用于您的文件)...

今天心情不错,这里有一些“伪”代码:

// you will guess declarations
// you might have to reverse bit order dependaing of how you store bits

for(int i = 0; i < 8; ++i)
{
    if(myvector[i]) mybistset.set(i);
}

char toWriteInFile = bitset.to_ulong();

// write in file

[...]

char readFromFile;

// read from file

std::bitset mybitset(readFromFile);

// same remarks

for(int i = 0; i < 8; ++i)
{
    myvector[i] = mybistset[i];
}

当然,你要管理大于8部分的向量;)

my2c

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2015-09-01
    相关资源
    最近更新 更多