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

Bash中$(( ))结构能否支持128位十六进制数的异或运算?

在Bash中处理128位十六进制数的异或运算

Bash的$(( ))结构无法直接处理128位整数——它依赖系统原生的整数类型(通常为64位),超过范围的数值会被截断,因此你得到的是截断后的64位异或结果。

以下是两种可行的替代方案:

方案1:逐字符异或

十六进制的每一位对应4位二进制,异或运算可以逐位独立完成。遍历两个字符串的每一对字符,分别计算异或后拼接结果:

x=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
y=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

result=""
for ((i=0; i<${#x}; i++)); do
    # 提取单个字符并转为十进制
    x_digit=$((16#${x:i:1}))
    y_digit=$((16#${y:i:1}))
    # 计算异或并转回十六进制字符
    xor_digit=$((x_digit ^ y_digit))
    result+=$(printf "%X" "$xor_digit")
done

echo "0x$result"

执行后会输出0x55555555555555555555555555555555,完全匹配128位的预期结果。

方案2:分块处理64位段

将128位字符串拆分为两个64位的子串(各16个十六进制字符),分别用$(( ))处理后拼接结果:

x=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
y=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

# 拆分高64位和低64位
x_high=${x:0:16}
x_low=${x:16:16}
y_high=${y:0:16}
y_low=${y:16:16}

# 分别计算异或
xor_high=$((16#$x_high ^ 16#$y_high))
xor_low=$((16#$x_low ^ 16#$y_low))

# 格式化输出,确保每个块补全16位(避免前导零丢失)
printf "0x%016X%016X\n" "$xor_high" "$xor_low"

这种方法利用Bash对64位整数的支持,拆分后运算,结果同样符合预期。

内容的提问来源于stack exchange,提问作者Rusty Lemur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:05:27