关于内存数据比较问题,请教

Zack0Fair 2013-01-18 10:37:37
先贴部分代码
CStringA strFlagData;
CStdioFile myFile;
if(myFile.Open(tempfilename,CFile::typeText|CFile::modeRead),&fileException)
{
strFlagData.GetBuffer(500*1024);
if(myFile.Read(strFlagData.GetBuffer(), 500*1024))
{
if(-1 != strFlagData.Find("123"))
//DO;
}

myFile.Close();
}


具体需求就是 读一个视频文件 找到它的头信息里面是否有123字符
但是我读取的时候
strFlagData中存了很多信息如"ASD ............ 123"
其中的空格 在内存中表示为00
然后发现strFlagData.Find("123")这句话实际上只查找了00以前的字符串"ASD/0" /0为00
请问有木有什么办法 从(strFlagData.GetBuffer()返回的VOID*类型指针 指向的内存中的数据找到“123”字符信息 ,有/0的信息处理好麻烦。。。 请大家帮忙 谢谢
...全文
129 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuachua66 2013-01-18
  • 打赏
  • 举报
回复
FILE* fl = fopen(xx, rb); fread(buffer) 然后再循环buffer,找123,要不读文件的时候把0替掉,要不全读出来,循环比较。应该就这么俩办法了吧。
Zack0Fair 2013-01-18
  • 打赏
  • 举报
回复
引用 1 楼 chuachua66 的回复:
不是有getlength嘛,做个循环慢慢读,不是0的再读入你的string,这样就是一个你想要得string了。
for (int i = 0 ; i < 500*1024 ; i++)
				{
					if (TmpBuf[i] == '1'&&TmpBuf[i+1] == '2'&&TmpBuf[i+2] == '3')
					{
						//do						break;
					}
				}
循环读也行- -但是效率是不是有点低 请问有木有什么其他方法?
chuachua66 2013-01-18
  • 打赏
  • 举报
回复
不是有getlength嘛,做个循环慢慢读,不是0的再读入你的string,这样就是一个你想要得string了。
prajna 2013-01-18
  • 打赏
  • 举报
回复
myFile.Open(tempfilename,CFile::typeText|CFile::modeRead) 文本文件中有'\0'字符?
wuxupu 2013-01-18
  • 打赏
  • 举报
回复
以二进制方式读取,而不是文本方式

64,674

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧