向往太阳 - helye的BLOG http://helye.52rd.net/ - 复制 - 收藏
博 文
C语言位运算 (2008-12-10 11:11)
一、位运算符C语言提供了六种位运算符:& 按位与| 按位或^ 按位异或~ 取反<< 左移>> 右移1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。  按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。main(){int a=9,b=5,c;c=a&b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);}2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。例如:9|5可写算式如下: 00001001|0000010100001101 (十进制为13)可见9|5=13main(){int a=9,b=5,c;c=a|b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);}3. 按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)main(){int a=9;a=a^15;printf("a=%d\n",a);}4. 求反运算 求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。例如~9的运算为: ~(00000000000010...
C语言嵌入式系统编程之屏幕操作(一) 汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能。例如,一个微波炉的LCD上没有必要提供显示"电子邮件"的功能;一个提供汉字显示功能的空调的LCD上不需要显示一条"短消息",诸如此类。但是一部手机、小灵通则通常需要包括较完整的汉字库。 如果包括的汉字库较完整,那么,由内码计算出汉字字模在库中的偏移是十分简单的:汉字库是按照区位的顺序排列的,前一个字节为该汉字的区号,后一个字节为该字的位号。每一个区记录94个汉字,位号则为该字在该区中的位置。因此,汉字在汉字库中的具体位置计算公式为:94*(区号-1)+位号-1。减1是因为数组是以0为开始而区号位号是以1为开始的。只需乘上一个汉字字模占用的字节数即可,即:(94*(区号-1)+位号-1)*一个汉字字模占用字节数,以16*16点阵字库为例,计算公式则为:(94*(区号-1)+(位号-1))*32。汉字库中从该位置起的32字节信息记录了该字的字模信息。 对于包含较完整汉字库的系统而言,我们可以以上述规则计算字模的位置。但是如果仅仅是提供少量汉字呢?譬如几十至几百个?最好的做法是: 定义宏: # define EX_FONT_CHAR(value) # define EX_FONT_UNICODE_VAL(value) (value), # define EX_FONT_ANSI_VAL(value) (value), 定义结构体: typedef struct _wide_unicode_font16x16 {  WORD value; /* 内码 */  BYTE data[32]; /* 字模点阵 */ }Unicode; #define CHINESE_CHAR_NUM … /* 汉字数量 */...
点阵的汉字程序(转) (2008-10-11 23:35)
DOS下的点阵汉字   你是否碰到过用启动盘启动系统后用DIR命令得到一串串莫名其妙的字符?有经验的朋友会告诉你:那是汉字。汉字?你不禁会问:怎么一个我一个也不认识。但那确确实实是汉字,如果你启动UCDOS或其他的汉字系统后,就会看到那是一个个熟悉的汉字。同样是汉字,为什么前后会看到不同的结果?呵呵,其实在电脑硬件中,根本没有汉字这个概念,也没有英文的概念,这铁玩意认识的概念只有——内码。 汉字的内码   点头表示什么?是“对”、“YES”,偏偏有的地方表示的意义却恰恰相反。一个动作,有不同的诠释;一个问题,有不同的答案;而一个符号,却有不同的意义,关键在于:你是如何地理解。在电脑中亦如此,所有的数据都是以0和1保存的,按不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有5000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。不信,你可以用记事本写一C文件:main(){ unsigned char *s,*e="ABcd",*c="你好"; clrscr(); printf("English char ="); s=e; while(*s!=0) /*C的字符串以0为结束符*/ {printf("%3d,",*s);  s++; } printf("\nChinease char="); s=c; while(*s!=0) {printf("%3d,",*s);  s++; } getch();}再用TC输入*.txt打开运行,看见了没有,那些数值即英文和汉字的各字节内码。 汉字字模   得到了汉字的...
保存有用的网址 (2008-9-19 09:21)
移动开发环境的搭建步骤及开发工具下载 http://blog.csdn.net/Alphen/archive/2008/08/23/2820782.aspx Visual Studio 调试器 断点与跟踪点 http://msdn.microsoft.com/zh-cn/vbrun/ktf38f66(VS.80).aspx
一些比较有价值的网址 (2008-8-21 21:52)
手机 开发平台 教程 (2008-8-6 16:07)
欢迎转载,转载请注明出处。作者:手机即信息 博客:http://canco.javaeye.com 近来无事,把手机开发平台的学习指南、教程和资料总结一下,方便大家参考。 手机客户端软件开发最大的困难就是平台不统一,手机开发平台太多。 手机可分为智能手机开发和feather phone手机。开发平台可分为开放式平台和封闭式平台,开放式平台包括symbian、windows mobile、linux、iPhone、Android、BlackBerry、j2me、brew等,支持手机应用程序通过OTA下载和安装;封闭式平台包括MTK、展讯、TI、飞利浦等。下面分别介绍。 1. Symbian: Symbian平台为目前智能手机市场的老大,智能手机全球市场占70%以上,在欧洲和亚洲占绝对优势,只是在美国市场份额少得可怜,希望今年nokia在美国发力,赶上其它智能手机。根据UI风格的不同,Symbian分为s60和UIQ两个平台,其中nokia使用s60平台,索爱和moto采用UIQ平台。Symbian平台由于发展时间较长,又是市场老大,目前中文资料也较多,不像几年前刚接触时只有英文资料。以下书籍值得推荐: 《SYMBIAN OS软件开发开发--应用C++开发智能手机应用程序入门》(其中UI部分为UIQ平台), 《Series 60 应用程序开发》(以s60平台为主,重点推荐) 《Symbian OS C++手机应用开发 (第2卷)》 另外今年将出来一本有关uiq3.0的新书,值得期待。 关于symbian的开发网站和论坛: 诺基亚论坛:最好的symbian论坛, http://discussion.forum.nokia.com/forum/forumdisplay.php?f=6,其中还有中文论坛。 UIQ官方论坛:http://developer.uiq.com/ Symbian公司中文论坛:http:...
不刻盘运行Knoppix 如果你已经下载了Knoppix的光盘映像,又有FAT32分区,并且又不想刻盘,还想尝试一下Knoppix,则可以采用下述步骤不刻盘运行Knoppix: 用虚拟光驱软件(如DAEMON Tools等)加载下载的光盘映像,然后进入虚拟成的光盘,将KNOPPIX目录拷贝到FAT32分区上,如D:\KNOPPIX; 进入Knoppix光盘的“boot\isolinux”目录,将linux24和minirt24.gz拷贝到D盘根目录下(若您使用2.6.x内核,请拷贝linux26和minirt26.gz),然后到http://elserv.ffm.fgan.de/~lermen/下载loadlin,解压缩为loadlin.exe放到D盘根目录下; 在D盘根目录下建立一个批处理文件,例如knoppix.bat,其内容内容如下: loadlin linux24 root=/dev/hda5 ramdisk_size=100000 init=/etc/init lang=cn apm=power-off vga=791 initrd=minirt24.gz nomce quiet BOOT_IMAGE=knoppix myconfig=scan其中/dev/hda5是Knoppix所在的FAT32分区。Knoppix将主分区当做/dev/hda1,第一个从分区为/dev/hda5,第二个从分区为/dev/hda6,依次类推,因此D盘是/dev/hda5。如果是第一次使用,可以去掉myconfig这个参数; 用软盘、U盘启动盘或者vfloppy虚拟软驱等想办法进入dos界面; 进入你放置Knoppix的分区,输入knoppix.bat,就可进入Knoppix。 此方法适用于Knoppix 3.4以上版本。  
http://www.embeded.cn/article/11565.htm(好贴保存,供自己温故知新) 曾经在报纸和杂志上多次见过讨论远程控制计算机的文章,这些文章中使用的软件大多是基于Netmeeting和pcAnywhere的,这些软件固然有它的优点,但他们完全依靠计算机,并且服务器和客户机之间必须足够快的网速。假如坐在公共汽车上去控制家里的计算机,举着笔记本和一个GPRS手机,恐怕就困难的多。有没有一个更加方便的手段去远程控制计算机呢?前几天刚申请了手机的WAP业务,是否能通过手机的WAP浏览器控制计算机呢?我通过WAP网页、ASP和VB实现了这套控制程序。 一、 WAP服务器的假设 要让WAP成为手机和计算机交流的媒介,必选先建立一个WAP服务器。该服务器必须拥有独立的IP地址,建议拥有独立的域名,避免更改IP地址的麻烦,我使用的是花生壳动态域名解析服务。 我所使用的服务器软件是微软的IIS6.0,操作系统是Microsoft Windows Server 2003。在IIS平台创建一个新的MIME类型。先选择WAP站点的属性,然后选择“HTTP头”标签。在“MIME类型”部分,点击“MIME类型”并且新建以下信息: 扩展名 MIME 类型 Wml text/vnd.wap.wml Wmlc application/vnd.wap.wmlc Wbmp image/vnd.wap.wbmp wmlsc application/vnd.wap.wmlscriptc Wmls text/vnd.wap.wmlscript Wsc application/vnd.wap/wmlscriptc 完成以后,将会显示以下几种类型: 现在,你就可以把你的网站内容加到站点文件夹里面了。 二、 WML语言 WML(Wireless Markup Language)是用于WAP的标记语言。WML页面文件的后缀是 *...
C指针(转) (2008-7-13 23:16)
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。   先声明几个指针放着做例子:   例一:   (1)int*ptr;   (2)char*ptr;   (3)int**ptr;   (4)int(*ptr)[3];   (5)int*(*ptr)[4];     指针的类型  从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:   (1)int*ptr;//指针的类型是int*   (2)char*ptr;//指针的类型是char*   (3)int**ptr;//指针的类型是int**   (4)int(*ptr)[3];//指针的类型是int(*)[3]   (5)int*(*ptr)[4];//指针的类型是int*(*)[4]   怎么样?找出指针的类型的方法是不是很简单?   指针所指向的类型  当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。   从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:   (1)int*ptr;//指针所指向的类型是int   (2)char*ptr;//指针所指向的的类型是char   (3)int**ptr;//指针所指向的的类型是int*   (4)int(*ptr)[3];//指针所指向的的类型是int()[3]   (5)int*(*ptr)[4];//指针所指向的的类型是int*()[4]   在指针的算术运算中,指针所指向的类型有很大...
vc++6.0编译器详解 (2008-6-29 23:44)
大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢?    闲话少说。我们先来看一下VC的处理流程,大致分为两步:编译和连接。源文件通过编译生成了.obj文件;所有.obj文件和.lib文件通过连接生成.exe文件或.dll文件。下面,我们分别讨论这两个步骤的一些细节。    编译参数的设置。主要通过VC的菜单项Project->Settings->C/C++页来完成。我们可以看到这一页的最下面Project Options中的内容,一般如下:  /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_M BCS" /Fp"Debug/WritingDlgTest.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c    各个参数代表的意义,可以参考Msdn。比如/nologo表示编译时不在输出窗口显示这些设置(我们可以把这个参数去掉来看看效果)等等。一般我们不会直接修改这些设置,而是通过这一页最上面的Category中的各项来完成。    1) General:一些总体设...
博 主
进入helye的首页
博客名称:向往太阳
日志总数:15
评论数量:8
访问次数:28185
建立时间:2007-4-17 16:17:00
导 航
公 告
有时候我觉得自己像一只小小鸟 想要飞却怎么样也飞不高
评 论
链 接