【发布时间】:2019-03-15 22:11:23
【问题描述】:
在我的应用程序中遇到一种情况,应用程序使用 128 位整数(特别是 __uint128_t),有时应用程序需要将此 128 位整数编码为两个 64 位整数(__uint64_t )。
(为了这个问题,假设它必须像这样对它们进行编码——这个问题不是关于编码它的替代方法)
我该怎么做?我必须能够编码和解码。
void encode(__uint128_t src, __uint64_t &dest1, __uint64_t &dest2)
{
// ...
}
void decode(__uint64_t src1, __uint64_t src2, __uint128_t &dest)
{
// ...
}
使用示例:
__uint128_t bigIntBefore = 999999999999999999;
__uint64_t smallInt1;
__uint64_t smallInt2;
encode(bigIntBefore, smallInt1, smallInt2);
// ... later
__uint128_t bigIntAfter;
decode(smallInt1, smallInt2, bigIntAfter);
// bigIntAfter should have a value of '999999999999999999'
【问题讨论】:
-
一个 int128 可能已经是一个包含 2 个 int 64 的结构。
-
你的 128 位整数类型来自哪里?编译器扩展、库,什么?
-
@Shawn 不太确定,我认为
__uint128_t和__uint64_t有点标准。我会试着找出答案。 (我是 C++ 菜鸟,请原谅我) -
@JamesWierzba:他们很不标准......标准是this。
-
问问自己这个问题:您如何将 64 位
unsigned int编码/解码到两个 32 位unsigned ints?一个 32 位unsigned int从/到两个 16 位unsigned ints 怎么样?如何从 8 位unsigned ints 序列中编码/解码这些类型中的任何一种?