You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用库函数合并数组中不同位置的高低字节十六进制值

无库函数实现十六进制高低字节合并与数值比较

一、高低字节合并方法

核心靠位运算实现,逻辑很直接:

  • 高字节(highbyte)要占据16位数值的高8位,所以把它左移8位(highbyte << 8),相当于在二进制末尾补8个0,把高字节挪到正确的高位位置。
  • 低字节(lowbyte)直接占低8位,和移位后的高字节做按位或运算(|),就能得到完整的16位数值。(用加法也可以,因为移位后的高字节低8位全是0,加法结果和按位或完全一致)

示例验证

已知 lowbyte=0xF4,highbyte=0x01:

  1. 高字节左移8位:0x01 << 8 = 0x100(十进制256)
  2. 按位或低字节: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:逐字节比较(更高效,无需合并)

利用高位优先级高于低位的特性,分两步判断:

  1. 先比高字节:
    • 若 highA > highB,则A对应的整体数值更大;
    • 若 highA < highB,则B对应的整体数值更大;
  2. 高字节相等时,再比低字节:
    • 若 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:05:29