java - 这个 reinterpret_cast 是如何工作的? (将 C++ 移植到 Java)

标签 java c++ porting reinterpret-cast

我有一些要移植到 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/

相关文章:

c++ - 为什么 10^1 是 11?

c++ - 无法从 'const wchar_t *' 转换为 '_TCHAR *'

android - Apportable porting from Cocos2d 项目报错

java - LanguageTool Java API 是否有 "useless"依赖项?

java - FetchMode.JOIN 急切地获取成员列表显然会产生笛卡尔积

java - Java中LocalDate属性的编译问题?

C++ 头文件 - 将它们放在一个目录中或合并为树结构?

c++ - 函数在 lpc824 中返回错误值

linux - Linux 中 `sysinfo.h` 的 Mac OS X 等效头文件

java - AsyncTask 中的 Runnable 是否会阻止服务/Activity ?它对我有用