查找浮点类型的内存格式
Find float type's memory format
如何找到float
和double
类型的内存格式?
我的意思是符号,指数和分数的位。
我的意思是符号,指数和分数的位。
您可以使用std::numeric_limits<T>::digits
获取Mantissa位,std::numeric_limits<T>::is_signed
获取标志位。
您并从sizeof(T)*CHAR_BIT
扣除其总和以猜测指数数字,但是如果类型有填充,这可能是不正确的。例如,long double
是典型的。
查找浮点类型的内存格式
当然,不仅块的数量很重要,而且订单也很重要。这些功能对您无济于事。他们还假设std::numeric_limits<T>::radix == 2
。
对于确切的格式,您必须咨询CPU Architechture的手册。
我想将浮点号保存到硬盘上,并想知道是否有一个很好的方法来制作文件交叉平台。
最典型的解决方案是在保存到磁盘时将浮点转换为文本表示:0x1.8p+0
。它不是最有效的,但它是可移植的(尽管您必须确定编码文件要使用的字符,如果不是系统的本地,则需要进行转换)。
要以跨平台方式将浮点数保存到磁盘,请查找我的github项目
https://github.com/malcolmmclean/ieee754
我还发挥了用于便于读取二进制整数的功能,因为它比一见钟情略多。
如果要测试内存格式,则需要创建具有某些战略值的浮子,然后查询位模式。除非您使用怪异而奇妙的硬件,否则零应该是所有位零和特殊情况。1和-1应该有所不同,这是您签名的。2和1的指数应有所不同,两个测试功能应告诉您指数位以及何时用完。速度的两个功率测试能力。
然后,您可以通过将1个功率储存1,例如3,7等来获取Mantissa。
通过探测它可以建立一个记忆模式,但是它几乎总是IEEE 754。
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 如何在openssl-ecc中获取十六进制格式的私钥
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- TDateTime格式在C++Builder中不会更改
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何从内存中读取原始图像 (YUV 4:2:2) 格式的图像数据
- 查找浮点类型的内存格式
- 如何释放 C++/C 格式的内存?我什么时候会写自由(a);?函数是重新指针
- 使用libav格式读取内存中的文件
- 在CUDA中以混合(HYB)格式为稀疏矩阵分配内存
- 当编译时数据格式和类型未知时,C++将数据读入内存