有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我用C++ C++做客户端和java的服务器。客户端必须设置该值,服务器必须检索该值

谢谢


共 (2) 个答案

  1. # 1 楼答案

    至少在c/c++大小上,您可以简单地使用以下结构: 不知道你是否可以用java tho做这个

    struct Header{
       unsigned short
             type: 4
             length: 12
             ;
    };  
    

    注意,这些可能需要改变

    此外,你可能会遇到endian问题,endian取决于不同的处理器类型(我所知道的所有amd和intel处理器都是相同的,我所知道的唯一不同的是PowerPC处理器,我认为它们在PS3和xbox 360中使用得最多)

  2. # 2 楼答案

    存储

    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;
    

    检索(从无符号字符[2])

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