1

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

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

结果将是 BigEndian 中支持分配的 5 字节/40 位无符号整数的内存表示,可能还有标准主机订单类型的操作。

或者提升或其他东西提供帮助?

非常感谢你!

4

1 回答 1

2

支持“X 位”(或“X 字节”)整数用于数学运算的完整补充,使用单字节运算,并且简单地从顶部或底部字节开始来执行此操作,这并不难。

但是,如果您想要一些表现,您将不想这样做。

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

至于大/小端,我将使用本机格式作为内部表示,并在它转出时对其进行转换(尽管我不确定这是一个“正常”转换 - 如果你有“

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

肯定b不应该包含0x78563412;?

于 2013-05-30T13:37:39.150 回答