写一个小工具遇到的问题记录

工具功能:

通过该工具调用rslogo.exe生成samsung.c(其内容为一个有600多K的数组),将samsung.c中的数组读取出来并以二进制的方式保存到kmt_iii.sys文件中。生成的kmt_iii.sys文件通过单独的刷机就可以修改wince的启动背景图片。


Q1、读取samsung.c中的数组。

读取文件很简单,但是读取出来的是字符型的数据,需要将其转换为16进制,实现将0x####转换为整形数据,运用了以下方法:

int CChangeBgPicDlg::CString2hex(CString str,int Count)
{
	int a,b,c,d;

	if (str[Count]>='0' && str[Count]<='9') 
		a = str[Count] - '0'; 
	else if(str[Count]>='a' && str[Count]<='f')
		a = str[Count]-'a'+10; 
	else if(str[Count]>='A' && str[Count]<='F') 
		a = str[Count]-'A'+10; 
	else 
		return -1; 

	if (str[Count + 1]>='0' && str[Count + 1]<='9') 
		b = str[Count + 1]-'0'; 
	else if(str[Count + 1]>='a' && str[Count + 1]<='f')
		b = str[Count + 1]-'a'+10; 
	else if(str[Count + 1]>='A' && str[Count + 1]<='F')
		b = str[Count + 1]-'A'+10; 
	else 
		return -1; 

	if (str[Count + 2]>='0' && str[Count + 2]<='9') 
		c = str[Count + 2]-'0'; 
	else if(str[Count + 2]>='a' && str[Count + 2]<='f')
		c = str[Count + 2]-'a'+10; 
	else if(str[Count + 2]>='A' && str[Count + 2]<='F')
		c = str[Count + 2]-'A'+10; 
	else 
		return -1; 

	if (str[Count + 3]>='0' && str[Count + 3]<='9') 
		d = str[Count + 3]-'0'; 
	else if(str[Count + 3]>='a' && str[Count + 3]<='f')
		d = str[Count + 3]-'a'+10; 
	else if(str[Count + 3]>='A' && str[Count + 3]<='F')
		d = str[Count + 3]-'A'+10; 
	else 
		return -1; 

	return a * 4096 + b * 256 + c * 16 + d; 
}
看起来真是很繁琐哦,不过倒是好用,不知各位有无其他巧妙一些的算法呢?希望指教。

Q2:数组定义问题。

之前的定义:unsigned short hStr[] = {0};

本意是定义一个足够大的数组,而这样只定义了数组大小为1的数组。不出问题才怪,最后还是CSDN上的朋友帮忙指出的。哎,基础很重要啊!引以为戒。

改为这样定义:unsigned short hStr[16];

Q3:文件写入问题。

程序基本都做好了,但是写入发现了问题,本来是153600字节的大小,可是写到kmt_iii.sys文件中竟然多出了几十个字节。后来我是一行一行的看,测试,终于看出问题出在哪里了。

程序中我运用的是CStdioFile操作的文件,包括创建和读写。这里就涉及到了CStdioFile类的特殊性,在向CStdioFile类文件写入数据的时候,若是写入“\n”(即0x0A),系统会自动在前面加一个“\r”(0x0D)一同写入。(PS:在win7系统中测试就不会这样,不知是系统问题还是其他问题呢?)

问题就出现在这里了,我写入的数组,其中有包含0x0A,前面就会多加一个字节的0x0D,这样,本来153600字节的文件,写入文件中就会多出一些字节了。后来用了C中用的FILE来操作文件,问题就解决了。又是一个基础性的问题,细节真的很重要!

编写这个小工具过程中,基本上就这3点印象较为深刻的问题,总结起来一句话:基础很重要,细节很重要!写在这里,来警醒自己!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值