CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

如何在stl的string中保存十六进制数据?

楼主Goober(花生)2005-11-24 16:00:29 在 C/C++ / C++ 语言 提问

如何在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

相关问题

  • 十六进制文件怎么保存?????????
  • 怎样把字符串保存成十六进制文件?
  • 急急急!!!!!****还是保存十六进制文件的问题****
  • (高分求)请问怎么将数据保存成十六进制形式?
  • C#中保存一串十六进制数据,用什么类型的数据呀?
  • 我用Memo提取了一段数据显示为一个十六进制数据,想保存十六进制的格式,请问如何保存,用什么格式保存??
  • 字符串--->十六进制
  • 十六进制运算
  • 十六进to制二进制
  • 十六进制的问题!

关键词

  • 数据
  • 字符
  • 内存
  • vector
  • 指针
  • 管理
  • vecchar
  • 十六进制
  • x00
  • 保存

得分解答快速导航

  • 帖主:Goober
  • steedhorse
  • yangyzqo

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo