2026a
# swapbytes
交换字节顺序
函数库: TyBase
# 语法
Y = swapbytes(X)
# 说明
Y = swapbytes(X) 将数组 X 中每个元素的字节排序从 little endian 转换为 big endian(或相反)。输入数组的所有元素必须是完整的非复数数值元素。 示例
# 示例
交换标量的字节顺序
将字节顺序转换为标量 32 位值。使用十六进制表示来显示从 little endian 到 big endian 的转换。
using TyBase
X = UInt32(hex2dec("4D3C2B1A"))
Y = dec2hex(swapbytes(X))
Y = "1A2B3C4D"
您还可以使用 0x 或 0X 前缀指定十六进制字面值。将数 X 指定为十六进制字面值。交换字节顺序。
X = 0x4D3C2B1A
Y = dec2hex(swapbytes(X))
Y = "1A2B3C4D"
交换向量的字节顺序
交换 1×4 向量的每个元素的字节顺序。
using TyBase
X = UInt16.([0 1 128 65535])
X = 1×4 Matrix{UInt16}:
0x0000 0x0001 0x0080 0xffff
Y = swapbytes.(X)
Y = 1×4 Matrix{UInt16}:
0x0000 0x0100 0x8000 0xffff
Int.(X)
1×4 Matrix{Int64}:
0 1 128 65535
Int.(Y)
1×4 Matrix{Int64}:
0 256 32768 65535
交换三维数组的字节顺序
创建包含 16 位整数的三维数组 A。交换每个元素的字节顺序。使用十六进制表示来显示 endian 转换。
using TyBase
using TyMath
X = zeros(UInt16,3,3,2)
X[:,:,1] = magic(3) * 150
X[:,:,2] = X[:,:,1]*40
X
X = 3×3×2 Array{UInt16, 3}:
[:, :, 1] =
0x04b0 0x0096 0x0384
0x01c2 0x02ee 0x041a
0x0258 0x0546 0x012c
[:, :, 2] =
0xbb80 0x1770 0x8ca0
0x4650 0x7530 0xa410
0x5dc0 0xd2f0 0x2ee0
Y = swapbytes.(X)
Y = 3×3×2 Array{UInt16, 3}:
[:, :, 1] =
0xb004 0x9600 0x8403
0xc201 0xee02 0x1a04
0x5802 0x4605 0x2c01
[:, :, 2] =
0x80bb 0x7017 0xa08c
0x5046 0x3075 0x10a4
0xc05d 0xf0d2 0xe02e
# 输入参数
X - 数值
数值,指定为标量、向量、矩阵或多维数组。如果 X 为非标量,则按元素执行 swapbytes 运算。
将 Little Endian 转换为 Big Endian
计算机系统以字节为单位存储数据。在计算机内存中存储数值有两种方法:little endian 和 big endian。在 little-endian 样式中,字节的有效位从左到右递增。在 big-endian 样式中,字节的有效位从左到右递减。swapbytes 函数交换内存中的字节顺序,将 little endian 转换为 big endian(或相反)。
下图说明了 32 位(4 字节)十六进制数 4D3C2B1A 的转换。在十六进制记数法中,一个字节用两个位表示。Little-endian 图中的每个框显示一个字节的数据(4D、3C、2B 和 1A)。swapbytes 函数交换这些框或字节的顺序。
