是否可以在 Bash 中将字符串转换为字符并执行类似于 C 中的操作?

是否可以在 Bash 中将字符串转换为字符并执行类似于 C 中的操作?

我知道在 Bash 中一切都是字符串。

但是我有一些从其他来源获得的表示 0 到 255 之间的数字的变量,例如 123,它是一个长度为 3 的字符串,我想将其“打包”在一个字节中(而不是 3 个)。我还想对这些字节进行加法/减法(因此必须对 256 取模才能溢出)。

基本上我想要做的就像 C 中的 char 类型。

使用 Bash 实现这一点的最佳方法是什么?

答案1

Bash 是一种弱类型语言——您不需要对包含 ASCII 十进制数的变量进行任何特殊处理,因为只要您实际尝试使用它进行整数运算,它就会自动转换为整数值。

var="123"

let var+=42

(( var -= 42 ))

echo $(( var + 7 ))

虽然你可以明确地将变量声明为整数,但这并没有太大变化(主要是它使得该变量的赋值即使不使用“let”也会自动解析算术表达式):

declare -i var=123

但是,Bash 没有 'char' 或 'byte' 类型 - 有符号的 32/64 位 'int' 才是仅有的它具有数字类型。因此您需要手动处理其他所有内容。

模 256 加法可以按字面意思写成模 256 加法:

(( var = (var + 789) % 256 ))

我不太确定减法,因为 bash 整数总是有符号的,但我猜这是一种在大多数架构上执行减法的方法:

(( var = (var - 345) & 255 ))

我建议使用 bash 以外的其他东西。

相关内容