如何将u128
转换为u64
s的数组。当将u128
传递给接受任意精度int的API时,API接受3个参数
LLVMValueRef LLVMConstIntOfArbitraryPrecision (
LLVMTypeRef IntTy,
unsigned NumWords,
const uint64_t Words[]
)
前两个参数是已知的(IntTy
= LLVMInt128Type
,NumWords
= 2)。第三个参数需要一个uint64_t
s的数组。提供的u128需要转换为u64的数组。从rust文档看,u128
可以转换为字节数组,例如:
let buff: [u8; 16] = u128_val.to_ne_bytes();
let Words: [u64; 2] = ?? // What to do here?
如何将buff
转换为Words
数组?如何处理字节序。为了简单起见,代码生成器和API将在具有相同字节序的机器上运行。
2条答案
按热度按时间odopli941#
我只是用手做的,这避免了任何不安全的,是直接向前的,关心endianness:
这将转换为:
7nbnzgx92#
标准库中没有内置任何东西(但请参阅Project Safe Transmute)。使用
bytemuck
:不安全: