Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有不同内存表示的n字节大小的整数_C++_Memory_Integer - Fatal编程技术网

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

C++ 具有不同内存表示的n字节大小的整数,c++,memory,integer,C++,Memory,Integer,我很快就会处理大量以内存表示的自定义整数类型,并且保持这种可移植性,总是会导致相同的操作。我正在考虑构建某种自定义整数类,但我想知道这样的类是否已经存在?例如,要支持以下内容: char * buffer_ptr = //.... UInteger<5> d( buffer_ptr, E_Type_BigEndian ); d = 20; uint64 e = 1234567890; d += e char*buffer\u ptr=/。。。。 UInteger d(缓冲区,E_类

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

char * buffer_ptr = //....
UInteger<5> d( buffer_ptr, E_Type_BigEndian );
d = 20;
uint64 e = 1234567890;
d += e
char*buffer\u ptr=/。。。。
UInteger d(缓冲区,E_类型_BigEndian);
d=20;
uint64 e=1234567890;
d+=e
结果将是一个5字节/40位无符号整数的内存表示形式,采用BigEndian支持赋值,可能还支持标准主机顺序类型的操作

或者boost或其他东西能帮上忙吗


多谢各位

支持“X位”(或“X字节”)整数作为数学运算的完整补码并不难,使用单字节运算,只需从顶部或底部字节开始即可

然而,如果你想要一些表现的假象,你就不想这样做

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

至于big/little-endian,同样,我会使用本机格式作为内部表示,并在转出时转换它(尽管我不确定这是“正常”转换-如果您有”

Uinteger a(…,E_Type_BigEndian);
a=0x12345678
uint64 b=a;
当然
b
不应该包含
0x78563412;

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