gpt4 book ai didi

c++ - 具有不同内存表示的 n 字节大小的整数

转载 作者:行者123 更新时间:2023-11-30 04:17:46 27 4
gpt4 key购买 nike

我很快就会处理大量内存表示的自定义整数类型,并保持这种可移植性,结果总是相同的操作。我想构建某种自定义 Integer 类,但我想知道这样的东西是否已经存在?例如支持这样的东西:

char * buffer_ptr = //....
UInteger<5> d( buffer_ptr, E_Type_BigEndian );
d = 20;
uint64 e = 1234567890;
d += e

结果将是 BigEndian 中的 5 字节/40 位无符号整数的内存表示形式,支持赋值和标准主机顺序类型的操作。

或者 boost 或其他东西对此有帮助吗?

非常感谢!

最佳答案

支持“X 位”(或“X 字节”)整数以进行完整的数学运算并不难,使用单字节运算,只需从顶部或底部字节开始即可做到这一点.

但是,如果您想要一些表面上的性能,您将不会想要那样做。

我从事的项目主要针对任意位数的整数执行此操作。但是,为了实现数学运算的合理性能(例如 int3 x = 2; x += 5; ...),它使用 32 位整数(大于 32 位的 64 位 int)来执行所有简单的数学运算,并且只有在最后,当值从变量本身转移出来时,任何多余的位才会被屏蔽掉。这几乎肯定会将计算性能提高 10-100 倍,具体取决于所使用的操作和序列。

至于大端/小端,我还是会使用 native 格式作为内部表示,并在它传出时转换它(尽管我不确定这是一个“正常”转换——如果你有“

 Uinteger<3> a(..., E_Type_BigEndian);
a = 0x12345678
uint64 b = a;

当然 b 不应该包含 0x78563412; 吗?

关于c++ - 具有不同内存表示的 n 字节大小的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16837538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com