【问题标题】:Extract the bit stream (0 and 1) of an object提取对象的比特流(0 和 1)
【发布时间】:2012-03-22 01:49:37
【问题描述】:

我需要得到一个对象的位。换句话说,我想将一个对象视为原始数据并提取它的 0 和 1 位。我该怎么做?

例如,我有一个名为 vec 的用户定义类型的向量,如下所示,

std::vector<NodeEntry *> vec;

vec 指向一个对象。该对象位于内存中,由 0 位和 1 位组成。如何提取此对象的比特流(0 和 1)。

【问题讨论】:

  • 你想得到一个指针数组的位吗?这样做有什么好处?
  • 我想获取 vec 变量所引用的对象的位。我想对位应用纠删码算法。换句话说,纠删码算法的输入是原始数据(0 和 1 位)。
  • 将指针转换为 char* 或 byte* 或其他任何内容,然后使用它。当然,弄清楚对象的大小可能是一项挑战。
  • 如果您打算修改对象,最好确保以某种方式避免踩踏任何系统关键信息。
  • 您可以将在地址(对于对象的大小)处的数据中读取的对象的地址作为byte* 获取,然后使用它。

标签: c++ object


【解决方案1】:
vector<NedeEntry*> vec;
// populate vec
char* rawData = reinterpret_cast<char*>(&vec);
for (char* tmp=rawData; tmp != rawData+sizeof(vec); ++tmp) {
  // extract 0s and 1s from *tmp
} 

请注意,上面的代码将为您提供矢量对象的二进制表示,但根据您的实际需要,这可能不是您想要的。例如,此代码很可能不会为您提供放入向量中的指针,因为这些指针包含在动态分配的数组中(很可能),因此您最多只能获得该数组地址的二进制表示。

如果您还想要包含对象的二进制表示,您将需要很多魔法,因为没有可移植的方法来确定哪个字节序列表示内部数组的地址,例如。或者您可以只遍历向量并对各个内容对象(示例中的指针)执行类似的逻辑。要正确处理这些,您将需要自定义代码等。

【讨论】:

  • OP 明确指出他想要的是 pointers 的比特流,而不是向量。
  • @DeadMG - OP 在帖子中的什么地方说想要指针?他提到想要对象本身的比特流。此外,即使是这样,我也确实给出了如何获得指针的想法
猜你喜欢
  • 2022-10-01
  • 2017-03-16
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多