我有一些要移植到 Java 的 C++ 代码,看起来像这样:
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
在做什么?
最佳答案
它基本上是说当前指针所代表的 8 位应该被解释为“foostruct”。
我认为这样写会更好:
const unsigned char aa = *buffer & 0x07;
const bool ab = (*buffer & 0x08) != 0;
const unsigned char ba = (*buffer & 0x70) >> 4;
const bool bb = (*buffer & 0x80) != 0;
我认为那时正在做的事情要明显得多。我认为您可能会发现以这种方式移植到 Java 也更容易......
关于java - 这个 reinterpret_cast 是如何工作的? (将 C++ 移植到 Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4439273/