C ++相当于Java ByteBuffer? [英] C++ equivalent of Java ByteBuffer?

查看:194
本文介绍了C ++相当于Java ByteBuffer?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一个C ++等效的Java ByteBuffer。



我可能错过了明显的或只是需要一个孤立的使用示例来澄清。我看过iostream家庭&它看起来可能提供一个基础。具体来说,我希望能够:




  • 从字节数组/点构建一个缓冲区,并从缓冲区获取原语。 getByte,getInt

  • 使用基元例如


解决方案

$ c> stringbuf , filebuf 或者可以使用 vector< char> p>




这是一个使用 stringbuf

  std :: stringbuf buf; 
char data [] = {0,1,2,3,4,5};
char tempbuf [sizeof data];

buf.sputn(data,sizeof data); // put data
buf.sgetn(tempbuf,sizeof data); // get data




感谢@Pete Kirkham的通用函数的想法。

  #include< sstream> 

template< class Type>
std :: stringbuf& put(std :: stringbuf& buf,const Type& var)
{
buf.sputn(reinterpret_cast< const char *>(& var),sizeof var);

return buf;
}

模板< class Type>
std :: stringbuf& get(std :: stringbuf& buf,Type& var)
{
buf.sgetn(reinterpret_cast< char *>(& var),sizeof(var));

return buf;
}

int main()
{
std :: stringbuf mybuf;
char byte = 0;
int var;

put(mybuf,byte ++);
put(mybuf,byte ++);
put(mybuf,byte ++);
put(mybuf,byte ++);

get(mybuf,var);
}


I'm looking for a C++ "equivalent" of Java ByteBuffer.

I'm probably missing the obvious or just need an isolated usage example to clarify. I've looked through the iostream family & it looks like it may provide a basis. Specifically, I want to be able to:

  • build a buffer from a byte array/point and get primitives from the buffer, e.g. getByte, getInt
  • build a buffer using primitives e.g. putByte, putInt and then get the byte array/pointer.

解决方案

You have stringbuf, filebuf or you could use vector<char>.


This is a simple example using stringbuf:

std::stringbuf buf;
char data[] = {0, 1, 2, 3, 4, 5};
char tempbuf[sizeof data];

buf.sputn(data, sizeof data); // put data
buf.sgetn(tempbuf, sizeof data); // get data


Thanks @Pete Kirkham for the idea of generic functions.

#include <sstream>

template <class Type>
std::stringbuf& put(std::stringbuf& buf, const Type& var)
{
    buf.sputn(reinterpret_cast<const char*>(&var), sizeof var);

    return buf;
}

template <class Type>
std::stringbuf& get(std::stringbuf& buf, Type& var)
{
    buf.sgetn(reinterpret_cast<char*>(&var), sizeof(var));

    return buf;
}

int main()
{
    std::stringbuf mybuf;
    char byte = 0;
    int var;

    put(mybuf, byte++);
    put(mybuf, byte++);
    put(mybuf, byte++);
    put(mybuf, byte++);

    get(mybuf, var);
}

这篇关于C ++相当于Java ByteBuffer?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆