|
作者: ypy [ypy] 见习版主 | 登录 |
我想在BCB中实现把文本文件中的内容转换成16进制ASCII码,代码中一部分如下: pszBuffer=new char[iFileLength+1]; //读取文件内容 iBytesRead=FileRead(iFileHandle,pszBuffer,iFileLength); FileClose(iFileHandle); //转换成16进制ASCII码 for(j=0;j<iBytesRead;j++) { sprintf(hexchar,"%02x",int(pszBuffer[j])); hexBuffer+=AnsiString(hexchar).UpperCase(); } delete []pszBuffer; iFileHandle=FileCreate(ListBox1->Items->Strings[i]); iFileLength=hexBuffer.Length()+100; //把16进制ASCII码写入文件 FileWrite(iFileHandle,hexBuffer.c_str(),iFileLength); FileClose(iFileHandle); 其中前面的iFileHandle为读入内容的文件句柄,文件长度iFileLength值已定。 几个变量的声明: int i; int j; int iFileHandle; int iFileLength; int iBytesRead; char *pszBuffer; AnsiString hexBuffer; char hexchar[4]; 头文件包括: #include <SysUtils.hpp> #include <stdio.h> 请教:为什么对文件中的中文不能正确处理,我该怎么改才正确? 谢谢了各位! [此贴被 ypy(ypy) 在 03月22日23时20分 编辑过] |
地主 发表时间: 2003-03-22 23:16:20 |
回复: ypy [ypy] 见习版主 | 登录 |
各位请帮个忙啊 |
B1层 发表时间: 03/23 22:41 |
回复: 286 [unique] 版主 | 登录 |
ASCII码只是一个符号代码,无16进制10进制一说。 汉字在处理的时候,一个汉字并不是当成两个字符,而是汉字一次读就是一个汉字。更不能转化成大写了。 问题出在: ////////////////////////////////////////////// sprintf(hexchar,"%02x",int(pszBuffer[j])); hexBuffer+=AnsiString(hexchar).UpperCase(); /////////////////////////////////////////////// 改成: /////////////////////////////////////// sprintf(hexchar,"%02X",pszBuffer[j]); hexBuffer+=AnsiString(hexchar); /////////////////////////////////////// 试试。 |
B2层 发表时间: 03/24 11:46 |
回复: ypy [ypy] 见习版主 | 登录 |
谢谢你的回复 不过有点疑问: 1.ASCII码可以转换成任何进制数 2.int(pszBuffer[j])是把pszBuffer[j]强制转换成int数 如果如你所说,那程序的结果应该是复制文件了,而且要改也应该改成 sprintf(hexchar,"%s",pszBuffer[j]); 我记得中文要分为两个部分高字节和低字节处理,可是不知道具体怎么做 希望再跟帖 |
B3层 发表时间: 03/24 15:04 |
回复: 286 [unique] 版主 | 登录 |
1.“ASCII码可以转换成任何进制数”,这是对的,但转化后的无论是哪个进制,都不再叫ASCII码了,而变成了一个普通的数,别的数也可以转化成ASCII码。 2.“int(pszBuffer[j])是把pszBuffer[j]强制转换成int数 如果如你所说,那程序的结果应该是复制文件了,而且要改也应该改成 sprintf(hexchar,"%s",pszBuffer[j]);”,pszBuffer[j]本身定义的虽然是char型,但在内存中存的是个数。也就是某个数的ASCII值,其值与转化成int后是一样的。"%s"是对字符串的,对字符不行,对整型更不行。 3 “我记得中文要分为两个部分高字节和低字节处理,可是不知道具体怎么做”早期的汉字系统为了和ASCII兼容,并规定每个字节最高位都为1的连续两个字符为一个汉字。为0的仍为ASCII字符。但在Windows系统中,现在一般采用unicode码。处理方式不一样。 |
B4层 发表时间: 03/24 17:32 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号