这是如何重新解释的?(C++到java的移植)
<>我有一些C++代码,我试图把它移植到java,看起来像这样:struct foostruct {
unsigned char aa : 3;
bool ab : 1;
unsigned char ba : 3;
bool bb : 1;
};
static void foo(const unsigned char* buffer, int length)
{
const unsigned char *end = buffer + length;
while (buffer < end)
{
const foostruct bar = *(reinterpret_cast<const foostruct*>(buffer++));
//read some values from struct and act accordingly
}
}
这个reinterpret_cast
在做什么
# 1 楼答案
buffer
实际上由foostruct
组成,而这些foostruct
又是叠加在单个8位字符上的位字段。本质上,在Java中也可以这样做,只需获取字节并自己执行移位和掩码操作# 2 楼答案
你有一个指向无符号字符的指针,对吗?现在假设指针指向的位被视为foostruct类型的对象。这就是reinterpret_cast所做的-它将位模式重新解释为另一种类型的内存表示
# 3 楼答案
它的基本意思是,当前指针上表示的8位应该被解释为“foostruct”
我认为最好是这样写:
我认为现在正在做的事情要明显得多。我想你也会发现用这种方式移植到Java更容易