我现在有一个char数组,是一个hex文件的内容。需要转为ASCII写入文件内生成hex文件。
使用如下函数转换:void CharToByte(char* pChar,BYTE* pByte)
{
char h,l;
h=pChar[0];//高位
l=pChar[1];//低位
if(l>='0'&&l<='9')
l=l-'0';
else if(l>='a' && l<='f')
l=l-'a'+0xa;
else if(l>='A' && l<='F')
l=l-'A'+0xa;
if(h>='0'&&h<='9')
h=h-'0';
else if(h>='a' && h<='f')
h=h-'a'+0xa;
else if(h>='A' &&h <='F')
h=h-'A'+0xa;
*pByte=(BYTE)h*16+l;
}
然后循环把char数组每两位用该函数转换得到一个BYTE,最后将所有BYTE写入文件即生成hax文件。
问题是每次当我传入 0A 时,写出来的就成了  0D 0A,上网搜说hax以回车键结束(0x0D,0x0A)。不知道是不是这个原因。
我最后得到的BYTE数组长度为512,但是由于有两个0A,写进文件后文件大小变成了514,多了两个0D。求指教啊。火烧眉毛。求大神降临。ps:只能允许发100分内的帖子,不懂为何。。

解决方案 »

  1.   

    额。上网搜到了。原来数据源都正确,就是写文件时,写0A时会多写一个0D,导致解析文件时,数据显示错误!       最后,通过查证原来是fwrite在作怪:       m_pfData = fopen(m_strFileName, "w+");   将 "w+“改成为"wb+"就OK了!       原来调用fwrite函数时,如果碰到换行符(0x0A),编译器会自动转换为回车换行符(0x0D 0x0A),然后写入文件。这样写入文件的数据就会与原始数据有差异。就当散分吧。。让大家见笑了。
      

  2.   

    说明白下,免得别人也有类似问题。
    VC的话就用二进制打开读写就可以了
    CFile::typeBinary
      

  3.   

    文件的打开方式中加上 "b"表示是纯二进制数据读取.
    没有加"b"的话表示是文本方式,这样在写入时会以0D 0A表示回车换行
    遇到0D或者0A时就会自动扩充成 0D 0A