我现在有一个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分内的帖子,不懂为何。。
使用如下函数转换: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分内的帖子,不懂为何。。
VC的话就用二进制打开读写就可以了
CFile::typeBinary
没有加"b"的话表示是文本方式,这样在写入时会以0D 0A表示回车换行
遇到0D或者0A时就会自动扩充成 0D 0A