如何:将 boost::endian 缓冲区类型转换回本机格式

Posted

技术标签:

【中文标题】如何:将 boost::endian 缓冲区类型转换回本机格式【英文标题】:Howto: convert boost::endian buffer types back into native format 【发布时间】:2017-01-29 00:18:55 【问题描述】:

buffers.hpp 的 boost::endian 示例展示了如何将原生格式转换为大端或小端。如何执行反函数以将大/小端格式恢复为原生格式?

例子:

#include <stdint.h>
#include <boost/endian/buffers.hpp>

using namespace boost::endian;

int main() 
uint64_t v= uint64_t(0x1011121314151617);

big_uint64_buf_t    b;
little_uint64_buf_t l;

// Set values, implicit native_to_*
b= v;
l= v;

// Get values, does not work
v= b;
v= l;

return 0;

gcc 编译器抱怨:

example.cpp:17:6: error: cannot convert 'boost::endian::big_uint64_buf_t aka boost::endian::endian_buffer ' 到 'uint64_t aka long unsigned int' 赋值

 v= b;
  ^

从 little endian 格式转换回来时会发生类似错误。

【问题讨论】:

【参考方案1】:

用途:

v= b.value(); // and/or
v= l.value();

虽然示例中缺少值函数的用法,但它记录在成员函数列表中。

【讨论】:

以上是关于如何:将 boost::endian 缓冲区类型转换回本机格式的主要内容,如果未能解决你的问题,请参考以下文章

java 如何将二进制数据流转换成字符串并保存

Buffer类的详解(转)

python_如何设置文件缓冲类型

Linux 中的零拷贝技术 转

在java中如何将bigdecimal类型转成String类型?

(转) sync命令