【问题标题】:n-bytes sized integers with different memory representation具有不同内存表示的 n 字节大小的整数
【发布时间】:2013-05-30 13:28:07
【问题描述】:

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

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

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

或者 boost 或其他东西可以提供帮助吗?

非常感谢!

【问题讨论】:

    标签: c++ memory integer


    【解决方案1】:

    支持“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;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 2018-09-04
      • 2013-08-24
      • 2013-11-18
      • 2013-08-30
      相关资源
      最近更新 更多