C++存储二进制流

时间:2022-09-24 14:58:16
大家好,我现在需要存储这样的东西 把 二进制流 类似于string类那样的保存起来。
比如 这样的数据 0x30 0x31 0x32 0x33 可以保存在 string类中,但是有些字符无法显示,不能保存在string类中。使用 char * 这样保存动态申请内存,总要需要自己释放,太麻烦。。有没有这样的容器类 可以保存 字节流,而不是asc字符串。

先谢谢大家
C++存储二进制流

实现类似这样的操作
不知道我说清楚了没有,
谢谢大家了,困惑了我很久啊 。。

12 个解决方案

#1


不会有问题,string可以存放二进制的内容。

#2


http://*.com/questions/4655206/is-it-valid-to-use-stdstring-to-hold-binary-data-to-avoid-manual-dynamic-mem

#3


引用 1 楼 healer_kx 的回复:
不会有问题,string可以存放二进制的内容。


脑袋有点小晕了。。假如我要在string中加一个 int类型的数据 得 取地址 然后在后面加结束符
append到里面么?

#4


引用 2 楼 healer_kx 的回复:
http://*.com/questions/4655206/is-it-valid-to-use-stdstring-to-hold-binary-data-to-avoid-manual-dynamic-mem


谢谢你的回答,我看看这篇文章,就是串口 需要发送一些 HEX串,我一直不知道C++的方法保存这些串和操作这些串的方法

#5


引用 1 楼 healer_kx 的回复:
不会有问题,string可以存放二进制的内容。

粗心了。。append有 限定长度的

#6


用string存放挺合适的,字节流本身就包含了不能直接显示的字节,很正常的,本来那些字节就是数据而已,你也不需要让它们直接去显示和打印,有自己的协议去解析它们的含义。

引用 楼主 onlyhuiyi 的回复:
大家好,我现在需要存储这样的东西 把 二进制流 类似于string类那样的保存起来。
比如 这样的数据 0x30 0x31 0x32 0x33 可以保存在 string类中,但是有些字符无法显示,不能保存在string类中。使用 char * 这样保存动态申请内存,总要需要自己释放,太麻烦。。有没有这样的容器类 可以保存 字节流,而不是asc字符串。

先谢谢大家
C++存储二进制流

实现类似这样的操作
不知道我说清楚了没有,
谢谢大家了,困惑了我很久啊 。。

#7


搞不懂你好你既存储二进制流了,为什么还在纠结有些字符无法显示? C++存储二进制流

#8


引用 6 楼 turingo 的回复:
用string存放挺合适的,字节流本身就包含了不能直接显示的字节,很正常的,本来那些字节就是数据而已,你也不需要让它们直接去显示和打印,有自己的协议去解析它们的含义。

Quote: 引用 楼主 onlyhuiyi 的回复:

大家好,我现在需要存储这样的东西 把 二进制流 类似于string类那样的保存起来。
比如 这样的数据 0x30 0x31 0x32 0x33 可以保存在 string类中,但是有些字符无法显示,不能保存在string类中。使用 char * 这样保存动态申请内存,总要需要自己释放,太麻烦。。有没有这样的容器类 可以保存 字节流,而不是asc字符串。

先谢谢大家
C++存储二进制流

实现类似这样的操作
不知道我说清楚了没有,
谢谢大家了,困惑了我很久啊 。。

恩恩 谢谢,自己有些问题 脑袋转不过来。。习惯ASC串的操作,对于二进制的流还是晕。。

#9


basic_string其实就是POD版本的vector,只要可以用memcpy进行复制的数据都可以放在里面。


struct point
{
    int x;
    int y;
};

int main()
{
    std::basic_string<point> ptary;
    point data[] = { 1, 2, 3, 4, 5, 6};
    ptary.append( & data[0], & data[3]);
    ……
}

#10


引用 7 楼 wangdahu888 的回复:
搞不懂你好你既存储二进制流了,为什么还在纠结有些字符无法显示? C++存储二进制流


自己把自己绕进去了。。哎,项目中大量的Cstring还是unicode类型的,
因为习惯使用Cstring的 Mid 来截取串中字符。。
操作的时候 HEX串 和字符串 转来转去的 我快晕死了。。
C++存储二进制流

#11


引用 9 楼 u010936098 的回复:
basic_string其实就是POD版本的vector,只要可以用memcpy进行复制的数据都可以放在里面。


struct point
{
    int x;
    int y;
};

int main()
{
    std::basic_string<point> ptary;
    point data[] = { 1, 2, 3, 4, 5, 6};
    ptary.append( & data[0], & data[3]);
    ……
}


恩恩 谢谢指导,第一次听说 basic_string 。。还是见识短。。研究研究

#12


感谢大家的热心帮助,这个问题基本解决了

谢谢大家,结贴给分

#1


不会有问题,string可以存放二进制的内容。

#2


http://*.com/questions/4655206/is-it-valid-to-use-stdstring-to-hold-binary-data-to-avoid-manual-dynamic-mem

#3


引用 1 楼 healer_kx 的回复:
不会有问题,string可以存放二进制的内容。


脑袋有点小晕了。。假如我要在string中加一个 int类型的数据 得 取地址 然后在后面加结束符
append到里面么?

#4


引用 2 楼 healer_kx 的回复:
http://*.com/questions/4655206/is-it-valid-to-use-stdstring-to-hold-binary-data-to-avoid-manual-dynamic-mem


谢谢你的回答,我看看这篇文章,就是串口 需要发送一些 HEX串,我一直不知道C++的方法保存这些串和操作这些串的方法

#5


引用 1 楼 healer_kx 的回复:
不会有问题,string可以存放二进制的内容。

粗心了。。append有 限定长度的

#6


用string存放挺合适的,字节流本身就包含了不能直接显示的字节,很正常的,本来那些字节就是数据而已,你也不需要让它们直接去显示和打印,有自己的协议去解析它们的含义。

引用 楼主 onlyhuiyi 的回复:
大家好,我现在需要存储这样的东西 把 二进制流 类似于string类那样的保存起来。
比如 这样的数据 0x30 0x31 0x32 0x33 可以保存在 string类中,但是有些字符无法显示,不能保存在string类中。使用 char * 这样保存动态申请内存,总要需要自己释放,太麻烦。。有没有这样的容器类 可以保存 字节流,而不是asc字符串。

先谢谢大家
C++存储二进制流

实现类似这样的操作
不知道我说清楚了没有,
谢谢大家了,困惑了我很久啊 。。

#7


搞不懂你好你既存储二进制流了,为什么还在纠结有些字符无法显示? C++存储二进制流

#8


引用 6 楼 turingo 的回复:
用string存放挺合适的,字节流本身就包含了不能直接显示的字节,很正常的,本来那些字节就是数据而已,你也不需要让它们直接去显示和打印,有自己的协议去解析它们的含义。

Quote: 引用 楼主 onlyhuiyi 的回复:

大家好,我现在需要存储这样的东西 把 二进制流 类似于string类那样的保存起来。
比如 这样的数据 0x30 0x31 0x32 0x33 可以保存在 string类中,但是有些字符无法显示,不能保存在string类中。使用 char * 这样保存动态申请内存,总要需要自己释放,太麻烦。。有没有这样的容器类 可以保存 字节流,而不是asc字符串。

先谢谢大家
C++存储二进制流

实现类似这样的操作
不知道我说清楚了没有,
谢谢大家了,困惑了我很久啊 。。

恩恩 谢谢,自己有些问题 脑袋转不过来。。习惯ASC串的操作,对于二进制的流还是晕。。

#9


basic_string其实就是POD版本的vector,只要可以用memcpy进行复制的数据都可以放在里面。


struct point
{
    int x;
    int y;
};

int main()
{
    std::basic_string<point> ptary;
    point data[] = { 1, 2, 3, 4, 5, 6};
    ptary.append( & data[0], & data[3]);
    ……
}

#10


引用 7 楼 wangdahu888 的回复:
搞不懂你好你既存储二进制流了,为什么还在纠结有些字符无法显示? C++存储二进制流


自己把自己绕进去了。。哎,项目中大量的Cstring还是unicode类型的,
因为习惯使用Cstring的 Mid 来截取串中字符。。
操作的时候 HEX串 和字符串 转来转去的 我快晕死了。。
C++存储二进制流

#11


引用 9 楼 u010936098 的回复:
basic_string其实就是POD版本的vector,只要可以用memcpy进行复制的数据都可以放在里面。


struct point
{
    int x;
    int y;
};

int main()
{
    std::basic_string<point> ptary;
    point data[] = { 1, 2, 3, 4, 5, 6};
    ptary.append( & data[0], & data[3]);
    ……
}


恩恩 谢谢指导,第一次听说 basic_string 。。还是见识短。。研究研究

#12


感谢大家的热心帮助,这个问题基本解决了

谢谢大家,结贴给分