java如何设置不按字节边界划分的位值 1 周,5 日 Questions & Answers 390 我有一个2字节的头字段,其中前四位是数据包类型,其他12位是长度。但我不知道如何存储和检索这些值 我用C++ C++做客户端和java的服务器。客户端必须设置该值,服务器必须检索该值 谢谢
# 1 楼答案 至少在c/c++大小上,您可以简单地使用以下结构: 不知道你是否可以用java tho做这个 struct Header{ unsigned short type: 4 length: 12 ; }; 注意,这些可能需要改变 此外,你可能会遇到endian问题,endian取决于不同的处理器类型(我所知道的所有amd和intel处理器都是相同的,我所知道的唯一不同的是PowerPC处理器,我认为它们在PS3和xbox 360中使用得最多)
# 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];
# 1 楼答案
至少在c/c++大小上,您可以简单地使用以下结构: 不知道你是否可以用java tho做这个
注意,这些可能需要改变
此外,你可能会遇到endian问题,endian取决于不同的处理器类型(我所知道的所有amd和intel处理器都是相同的,我所知道的唯一不同的是PowerPC处理器,我认为它们在PS3和xbox 360中使用得最多)
# 2 楼答案
存储
检索(从未签名的短文本中)
检索(从无符号字符[2])