在 Julia 中,如何像 C 中那样将无符号数转换为有符号数?

问题描述 投票:0回答:1

假设我有一个数字

0x83
,如果是无符号数,则为131,如果是有符号数,则为-125。 在C中很容易,我可以编写s8(0x83)将其转换为-125,因为数字是0x83,它只是解释数字。 但在Julia中,情况不同,UInt8类型不能轻易转换为Int8,我应该首先判断它是否在Int8的范围内,然后再转换它,否则我将使用Int16类型来帮助。 那么,如何才能高效且高性能地进行转换呢?

performance optimization type-conversion julia
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.