2

如果我在 C++ 中有:

char abc[4];

abc[0] = 0xC0; //11000000 in binary

abc[1] = 0x20; //00100000 in binary

abc[2] = 0x44; //01000100 in binary

abc[3] = 0x20; //00100000 in binary

那么这将如何存储在内存中 -

11000000 00100000 01000100 00100000 or the reverse way ??
----------------------------------- 
   0th      1st     2nd      3rd

在Java中我正在创建Bitset abc = new Bitset(32);

所以我需要以这个(相同的顺序)存储相同的值。这可以稍后根据位位置进行修改,所以必须完全相同。

那么abc[32] = 0xC0204420会做吗?如果我想以 c++ 方式存储值该怎么办?如果我错了,那么如何在 Java 中做到这一点......

4

3 回答 3

1

是的,这就是 C++char在内存中表示数组的方式。

至于Java,它完全是任意的。这取决于如何定义索引到您的索引Bitset和 C++“表示”中的字节/位索引之间的映射。您可以以任何您喜欢的方式定义此映射,只要您保持一致即可。

于 2011-05-09T11:34:19.420 回答
1

字节序不是问题。如果你使用char[4]最低地址 0 将是第一个,最高的 3 将是最后一个,所以你进入内存

char[0] char[1] char[2] char[3]

不管你做什么。

如果你做 a int x = *(reinterpret_cast<int*>(abc))那么你会得到不同的结果,这取决于字节顺序,因为 (4byte-)int有时被读为0123,有时3210- 我认为甚至2301在 60 年代左右。

您不能将0xC0204420(然后更大的数字127)放入 的第[32]ths 位置abc。如果你想实现一些“快速”(并且危险)的东西,你需要一个依赖于平台的reinterpret_cast. 看看htonntoh

于 2011-05-09T11:42:43.443 回答
0

如果您char abc[4];逐个字符地创建并填充它,那么是的,在内存中它将表示为11000000 00100000 01000100 00100000.

我在 Java BitSet 中看到的问题是 BitSet 的内容不能简单地表示为数字 - 没有方法,那么如何将 0xC0204420 转换为 BitSet 或者如何将 BitSet 表示为像 0xC0204420 这样的数字? 一种可能性是从 BitSet 中获取每八位,从中生成一个char(使用 Java 位运算符,如<<and |),然后从它们创建一些 char 数组或其他应该等于早期 C++ 的东西char[4]

于 2011-05-09T11:45:18.107 回答