VC++学习:字符串黑箱的背后
出处:CSDN 2004年03月01日 作者:titilima 责任编辑:linjixiong
文章导读: 去年的时候,由于某种原因,我需要将一个文件的二进制形式以文本的格式输出到一个文本文件中,类似下面这个样子: 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
去年的时候,由于某种原因,我需要将一个文件的二进制形式以文本的格式输出到一个文本文件中,类似下面这个样子:
4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00
B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 D0 00 00 00
0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68
69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F
74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20
6D 6F 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00
......
我想的很简单:打开文件,读取文件,用一个循环,对每个字节使用wsprintf,然后用lstrcat连接起来,写文件,搞定。于是我很容易地得到了以下这段毫无语法错误的代码:
// 注1:你可以将其中的几个未定义变量理解为全局变量。
// 注2:NEW是我定义的一个宏函数,仿照了C++ 的operator new。
// #define NEW(type, count) (type *)(malloc(sizeof(type) * (count)))
void Save(void)
{
DWORD dwSize, dwReaded, i;
TCHAR szByte[5];
// 读取源文件
hFileSrc = CreateFile(szFileSrc, GENERIC_READ, 0, NULL, OPEN_ALWAYS, 0, NULL);
dwSize = GetFileSize(hFileSrc, NULL);
lpbySrc = NEW(BYTE, dwSize);
ReadFile(hFileSrc, (LPVOID)lpbySrc, dwSize, &dwReaded, NULL);
// 下面的MYSIZE是一个指示缓冲区大小的宏,由于计算大小较为繁琐且与本文无关,所以此处略去
lpDst = NEW(TCHAR, MYSIZE);
*lpDst = '\0';
for (i = 0; i < dwSize - 1; i++)
{
if (i % 16 == 15) // 处理换行
wsprintf(szByte, "%02X\r\n", lpbySrc[i]);
else
wsprintf(szByte, "%02X ", lpbySrc[i]);
不花钱又能表达芳心,为对方设计情人节贺卡或者壁纸之类的,相信你的花心思制作的作品也能感动对方。...[详细]
- 视频教程:VC++从入门到精通07-10
- C#积木模块ABC(2)02-14
- C#积木模块ABC(1)02-14
- C#编程入门三部曲:第三步 增加响应用户02-14
- C#编程入门三部曲:第二步 向表单中增加02-14






