java - 如何设置不按字节边界划分的位值

标签 java c++ bit-manipulation

我有一个 2 字节的 header 字段,其中前四位是数据包类型,其他 12 位是长度。但我不知道如何存储和检索这些值。

我在客户端使用 ms c++,在服务器端使用 java。客户端必须设置此值,服务器必须检索它。

谢谢

最佳答案

存储

unsigned short get_header(unsigned char type, unsigned short length)
{
  return (static_cast<unsigned short>(type) << 12) | length;    
}

检索(从无符号短)

unsigned short header = /* get 2 header bytes */
unsigned char type = header >> 12;
unsigned short length = header & 0xFFF;

检索(从 unsigned char[2])

unsigned char bytes[2] = /* get 2 header bytes */
unsigned char type = bytes[0] >> 4;
unsigned short length = bytes[0] & 0xF | bytes[1];

关于java - 如何设置不按字节边界划分的位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450279/

相关文章:

c - C 中的位操作,设置最低有效位

c - 解释这个功能

java - 正则表达式 - 匹配两个单词或一个单词,但优先考虑两个单词

java 以偏移量和长度从 byte 到 int 传输位

java - OpenGL ES Android 中的深度缓冲区问题

c++ - 多个 std::threads 和主程序执行的问题

c++ - ^= 32 背后的想法是什么,它将小写字母转换为大写字母,反之亦然?

C++ 可变参数模板数组/访问元素

c - 在压缩方面将字符串存储为 'unsigned char' 的二进制字符串

java - 无法使用 Joda Time 解析带时区的日期