C ++相当于Java ByteBuffer? [英] C++ equivalent of Java ByteBuffer?
本文介绍了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屋!
查看全文