假设我有一个数字
0x83
,如果是无符号数,则为131,如果是有符号数,则为-125。
在C中很容易,我可以编写s8(0x83)将其转换为-125,因为数字是0x83,它只是解释数字。
但在Julia中,情况不同,UInt8类型不能轻易转换为Int8,我应该首先判断它是否在Int8的范围内,然后再转换它,否则我将使用Int16类型来帮助。
那么,如何才能高效且高性能地进行转换呢?
julia> reinterpret(Int8, 0x83)
-125
这是快速且非分配的:
julia> @btime reinterpret(Int8, 0x83)
1.200 ns (0 allocations: 0 bytes)
-125
这也适用于字节序列,在这种情况下,最重要的是分配新向量:
julia> @btime reinterpret(Int8, [0x83, 0x84, 0x85, 0x86, 0x87, 0x88])
21.206 ns (1 allocation: 64 bytes)
6-element reinterpret(Int8, ::Vector{UInt8}):
-125
-124
-123
-122
-121
-120