两个字符的 Endian 安全转换为 unsigned short

Endian safe conversion of two chars to unsigned short

我正在使用一个函数,它接受两个 char 作为参数,代表一个无符号的 16 位整数。我需要将这些值转换回无符号整数,并且我希望该方法是字节序安全的。我想出了下面的方法,但我想知道是否有更好的方法。我正在使用 Qt,所以最终值存储在 quint16.

char msb; // most significant byte
char lsb; // least significant byte
quint16 value = ((msb & 0xff) << 8) | (lsb & 0xff);

您可以使用 <QtEndian> 函数。在您的情况下,您可以使用 qFromLittleEndian。它是一个模板函数,因此您不需要将字符传递给函数,只需将 quint16 传递给它,它将 return 该 quint16 的主机端版本。响应时,您可以直接调用 qToLittleEndian。