Vin*_*nod 2 arrays parsing hex integer julia
问题 1:将整数转换为字节数组最快的方法是什么?
a = 1026
aHexStr = string(a,base = 16,pad = 4) #2 bytes, 4 chars
b = zeros(UInt8,2)
k = 1
for i in 1:2:4
b[k] = parse(UInt8,aHexStr[i:i+1],base = 16)
k += 1
end
Run Code Online (Sandbox Code Playgroud)
这种方法是最快的吗?
相关问题2:将十六进制字符串转换为字节数组最快的方法是什么?
我有一串十六进制数字
a = "ABCDEF12345678"
How can I convert this hex string to byte array?
b = zeros(UInt8,7)
k = 1
for i in 1:2:14
b[k] = parse(UInt8,a[i:i+1],base = 16)
k += 1
end
Run Code Online (Sandbox Code Playgroud)
这种方法是最快的吗?
对于第一个问题,reinterpret如果您同意附加 0 值,则可以使用字节:reinterpret(UInt8, [a])。\n这比 Bogumi\xc5\x82 Kami\xc5\x84ski 的答案中的代码稍快,大约 5-10% - 但它是几纳秒的差异。因此,如果额外的 0 很麻烦,则可能不值得。
编辑:您可以通过执行以下操作来删除多余的零:
\njulia> bytesfromint(i::Int64) =\n @inbounds @view reinterpret(UInt8, [i])[1:8-leading_zeros(i)>>3]\nRun Code Online (Sandbox Code Playgroud)\n这似乎也比 Bogumil Kaminsky 的答案中提到的方法快 20% 左右。
\n@inbounds @view reinterpret(UInt8, [ai])[(8-leading_zeros(ai)>>3):-1:1]会首先给你最重要的字节(像大端字节序),或者@inbounds @view reinterpret(UInt8, [ai])[2:-1:1]如果你知道你的数据只会占用 2 个字节。
(@view告诉 Julia 不要复制我们要求的数组部分,而是索引到原始数组本身 - 从而避免复制开销。向@inboundsJulia 保证我们的索引在数组的范围内 - 从而避免边界检查开销。)
| 归档时间: |
|
| 查看次数: |
1058 次 |
| 最近记录: |