考虑像 12345678
这样的8位字符作为一个字符串。它可以转换为一个数字,其中每个字节都包含一个数字,如下:
const char* const str = "12345678";
const char* const base = "00000000";
const uint64_t unpacked = *reinterpret_cast<const uint64_t*>(str)
- *reinterpret_cast<const uint64_t*>(base);
在小端系统上,unpacked
的值将会是 0x0807060504030201
。
如何以最快的方式将这个数字转换成 12345678
,也许通过乘以某些魔术数或使用 SIMD 直到 AVX2?
更新: 12345678
必须是存储在 32 位或 64 位整数中的数字,而不是字符串。
_mm_maddubs_epi16
和_mm_madd_epi16
。 - chtzuin64_t
,则无需进行转换即可使用uin64_t
。 - Jarod42std::from_chars
? - Jarod42