今天写了一个小软件的代码,其中用到的一个功能是将存放在一个数组里面的音频数据输出给硬盘的一个txt文件。每个音频数据的长度是一个char,如果直接用UltraEdit以二进制方式打开音频文件就会看到真实6进制数据。
但是当将数据写入txt文件中后,再打开txt文档就会乱码,用UltraEdit以二进制方式打开发现数据和原始音频数据一样。究其原因,主要是因为txt文档默认显示方式是以字符方式显示的,所以把一堆16进制数当做ASCII码进行显示的,当然是乱码。
因此,现在的问题就是,怎样把16进制数写入txt文档,显示的时候也是对应的16进制数呢?例如,我写入0xa9,当打开txt文档时仍然显示0xa9。世上无难事,只怕百度谷歌之。在网上搜了半天,很凌乱,没有十分对题的答案,只有自己一点点试一试了。最后找到了一种方法成功实现了所要的功能。
具体来说就是利用CString类的Format()函数将音频数据数组里的16进制数转换为CString。不多说,贴代码:
tempstring.Format(_T("%02X "),*(sampleData+i));
其作用是将sampleData为首指针的数组中第i个16进制数据格式化为字符串形式。
_T()宏的作用是如果编译采用Unicode方式编译,则采用两字节编码;若采用ANSI方式编译,则采用一字节编码。
在解决这个问题之后,还发现了一个问题,就是CString类对象的长度是有限制的,如果太长,就需要达到一定长度之后就将CString字符串写入硬盘或者文件缓冲区,再继续将后面的数组数据转换为CString。
下面是网上找的F