如何在stl的string中保存十六进制数据?
如何在stl的string中保存十六进制数据? 问题点数:50、回复次数:15Top
1 楼bing_huo(我是一个演员!)回复于 2005-11-24 16:03:06 得分 0
什么意思? 16进制数值?没理解太明白
你了解下std::ostrstreamTop
2 楼steedhorse(晨星)回复于 2005-11-24 16:04:06 得分 0
问题不明确。
不知道楼主说得“16进制数据”是啥?内存里数据都是2进制的,没有什么16进制的;而假如楼主问的是16进制字符串,那么怎样用string保存字符串还用问吗?Top
3 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2005-11-24 16:05:47 得分 0
up
Top
4 楼pappGG(天天向上)回复于 2005-11-24 16:10:49 得分 0
LZ说的是string中保存会包含包括'\0'在内的二进制数据内容吧
这种事情我用CString干过,把它当成可以动态申请内存的工具
不这样就不能用string本身的字符串操作方法,所有操作都要通过直接指向数据区的指针进行Top
5 楼Goober(花生)回复于 2005-11-24 17:01:14 得分 0
就是pappGG所说的情况,
我想保存的数据是0xaa,0xbb,0x00,
在string中如何存储。Top
6 楼steedhorse(晨星)回复于 2005-11-24 19:24:33 得分 25
那为什么不使用char数组,或者vector<char>之类的呢?
把非字符数据保存到string中会有任何好处么?Top
7 楼Goober(花生)回复于 2005-11-25 08:13:45 得分 0
to steedhorse:
用vector<char>也不行,
vector<char> vecChar;
vecChar[0] = 0xaa;//十六进制数据,0xaa表示一个字符
vecChar[1] = 0xbb;
vecChar[2] = 0x00;
vecChar[3] = 0xcc;
这时vecChar[3]的数据就没有了。
包存在string中好操作,否则就要用运行时库里的函数了。Top
8 楼yangyzqo(欺世盗名来灌水)回复于 2005-11-25 08:24:58 得分 25
用vector<char>也不行,
vector<char> vecChar;
vecChar[0] = 0xaa;//十六进制数据,0xaa表示一个字符
vecChar[1] = 0xbb;
vecChar[2] = 0x00;
vecChar[3] = 0xcc;
这时vecChar[3]的数据就没有了
----------------------------
vecChar[3]中的数据应该是存在的,只是在内存中你只看到可能只有前两个,你可以直接用指针访问就可以了 char ch = *(vecChar+3);
如果不放心,可以用GetLastError()来测试是否已经正确运行Top
9 楼steedhorse(晨星)回复于 2005-11-25 09:01:03 得分 0
vecChar[3]怎么可能没有了呢?楼主到底要干啥啊?
vector连对象、指针都能存,难道却存不下0xcc这个数了?
不过你的用法是有问题,你并没有为vector预留空间,就直接使用下标往里赋值了。Top
10 楼steedhorse(晨星)回复于 2005-11-25 09:02:23 得分 0
用到运行时库又如何呢?string也是库里的类啊,又不是C++的内建类型,一样的呀。Top
11 楼steedhorse(晨星)回复于 2005-11-25 09:04:56 得分 0
string的确主要是用来处理字符数据的。用来存储一般的数据,偶想不出有任何好处。
所以楼主还是详细说说自己的需要吧,让大家一起想想办法。
比如楼主说“保存在string中好操作”,究竟如何好操作了?Top
12 楼sinall()回复于 2005-11-25 09:11:58 得分 0
我觉得用vector<char>会比string好,string并非能够保存所有字符。
vector<char> vecChar;
vecChar.push_back(0xaa);//十六进制数据,0xaa表示一个字符
vecChar.push_back(0xbb);
vecChar.push_back(0x00);
vecChar.push_back(0xcc);
Top
13 楼Goober(花生)回复于 2005-11-25 09:18:47 得分 0
to steedhorse:
谢谢你的帮助,我所说的“保存在string中好操作”,是说
我自己可以不用动态的管理内存(如果使用char数据的话
自己要动态管理内存),因为我要不断的取数据和插入数据。
to yangyzqo:
对string来是不是一样的情况呢?Top
14 楼steedhorse(晨星)回复于 2005-11-25 09:20:32 得分 0
vector也不需要动态管理内存。或者严格说并非不需要,只是不需要你手工管理。Top
15 楼jadedrip(翡翠水滴)回复于 2005-11-25 09:57:22 得分 0
vector<char> vecChar;
vecChar[0] = 0xaa;//十六进制数据,0xaa表示一个字符
vecChar[1] = 0xbb;
vecChar[2] = 0x00;
vecChar[3] = 0xcc;
这样的写法是错误的,没有分配大小.
推荐的做法:
1. 创建一个足够大的数组,比如 char vecChar[1000];
这时一个空间换时间的做法,速度最快,但是浪费空间. 不过千、万这种数量级的数组浪费的空间可以忽略。
2. 如果一定喜欢动态的,使用 map<int,char>. 可以任意访问和使用数据。Top




