如何不使用库函数合并数组中不同位置的高低字节十六进制值
无库函数实现十六进制高低字节合并与数值比较
一、高低字节合并方法
核心靠位运算实现,逻辑很直接:
- 高字节(highbyte)要占据16位数值的高8位,所以把它左移8位(
highbyte << 8),相当于在二进制末尾补8个0,把高字节挪到正确的高位位置。 - 低字节(lowbyte)直接占低8位,和移位后的高字节做按位或运算(
|),就能得到完整的16位数值。(用加法也可以,因为移位后的高字节低8位全是0,加法结果和按位或完全一致)
示例验证
已知 lowbyte=0xF4,highbyte=0x01:
- 高字节左移8位:
0x01 << 8 = 0x100(十进制256) - 按位或低字节:
0x100 | 0xF4 = 0x1F4(十进制500),和示例结果匹配。
代码示例(C语言)
// 输入两个单字节十六进制值,返回合并后的16位数值 uint16_t merge_bytes(uint8_t lowbyte, uint8_t highbyte) { return (highbyte << 8) | lowbyte; }
Python版本(无依赖库):
def merge_bytes(lowbyte, highbyte): return (highbyte << 8) | lowbyte
二、数值比较方法
两种高效实现,都不需要任何库函数:
方式1:合并后直接比较
先用上面的方法把两组高低字节合并成完整数值,再用常规比较运算符(>/</==)判断大小,逻辑直观易懂。
方式2:逐字节比较(更高效,无需合并)
利用高位优先级高于低位的特性,分两步判断:
- 先比高字节:
- 若
highA > highB,则A对应的整体数值更大; - 若
highA < highB,则B对应的整体数值更大;
- 若
- 高字节相等时,再比低字节:
- 若
lowA > lowB,则A更大;反之则B更大;相等则两组数值完全相同。
- 若
示例验证
比较两组值:
- 组A:
lowA=0xF4,highA=0x01(合并后0x1F4,十进制500) - 组B:
lowB=0x20,highB=0x02(合并后0x220,十进制544)
先比高字节:0x01 < 0x02,直接得出组B数值更大,不用再看低字节。
再看高字节相等的情况:
- 组C:
lowC=0xF5,highC=0x01 - 组A:
lowA=0xF4,highA=0x01
高字节相同,比较低字节:0xF5 > 0xF4,所以组C数值更大。
代码示例(逐字节比较,C语言)
// 比较两组高低字节,返回1表示A>B,-1表示A<B,0表示相等 int compare_bytes(uint8_t lowA, uint8_t highA, uint8_t lowB, uint8_t highB) { if (highA > highB) { return 1; } else if (highA < highB) { return -1; } else { // 高字节相等,比较低字节 if (lowA > lowB) { return 1; } else if (lowA < lowB) { return -1; } else { return 0; } } }
内容的提问来源于stack exchange,提问作者12vi12
相关产品推荐
相关产品推荐

