好吧,你正在将char扩大为一个短值.你想要的是将两个字节解释为short.static_cast
无法投射unsigned char*
到unsigned short*
.你必须施展void*
,然后unsigned short*
:
unsigned short *p = static_cast(static_cast (&packetBuffer[1]));
现在,您可以取消引用p并获取短值.但是这种方法的问题是你从unsigned char*转换为void*然后转换为某种不同的类型.标准不保证地址保持不变(此外,解除引用该指针将是未定义的行为).更好的方法是使用位移,这将始终有效:
unsigned short p = (packetBuffer[1] << 8) | packetBuffer[2];