win32编程简介

 

复习Win32整理下知识.

为什么学习win32?

  我们要编写windos程序.都离不开API. 也就是我们所说的win32程序. 所以学好win32是你能不能再windows下编写程序的基础.

在win32下我们要学习的知识如下.

  1.字符  字符的存储.

  2.多线程编程.

  3.线程同步编程

  4.窗口程序.城后本质.

  5.消息机制.

  6.进程编程

  7.内存 管理

  8.文件操作.

  9.内存映射

  10.DLL以及静态库程序

  11.DLL注入技术.

  12.模块隐藏.脱链

  13.进程通信编程.

  14.HOOK技术.

二丶字符的本质

  我们发现学习Win32要学习很多知识.不过总结一下也没有那么多.主要是多用多学多做.

首先说下字符.

  字符有 ASCII编码格式.有 UNICODE格式. 也有UTF - 8 格式. 那么我们说下他们的存储以及管理吧.

1.ASCII编码.

ASCii编码表. 因为计算机是老外发明的.所以编码一开始只有127个.

而我们计算机存储的编码就是这种.

我们可以使用 十六进制工具查看一下. (winhex) 

1.新建文本文档.输入字符a

2.winhex查看字符存储的本质是什么.

关于第一步.省略.

可以看到存储的是0x61 十进制是97 也就是a所计算机存储ascii编码的时候.存储的就是ascii编码表中的格式.

2.Unicode编码

  上图的编码是ASCII编码. 但是只能存储127个字符.但是怎么显示中文那? 所以出了一个新的编码表.也就是GB2312编码表或者是GB2312

从127往上还有一个编码表.用于显示特殊符号的. 而GB2312编码表就是使用两个这样的编码来显示的.但是有一个弊端.如果同样一个中文.你发给外国朋友.他打开就会显示乱码了.

因为每个国家的编码格式都不一样.所以最后UNICODE格式出示.

UNICODE格式规定. 每一个字符都会使用独立的编码来显示.

比如 0x41 0x32 这两个字节来表示 中国的中字这样你发到任何电脑上都可以看到.

注意. UNICODE只是解决了字符怎么表示.并没有规定怎么存储. 什么意思?

意思就是 中字代表的是 0x41 0x32 那么国字就可能代表 0x41 0x32 0x33 使用三个字节来表示.

所以UNICODE - 16出世了 

UNICODE-16 没两个字节来表示一个字符,如果不够两个字节或者超过两个字节.那么在增加两个字节来表示.

所以我们常说的UNICODE 就是说的UNICODE-16

3.UTF-8编码

上面说了的UNICODE-16解决了存储方式.但是也有弊端. 一个字节我按照两个字节来表示. 那么不是浪费了一个空间吗.特别是用于网络传输的时候.

所以UTF-8出来了. UTF - 8 就是可变长的. 什么意思.意思就是说.一个字节我就用一个字节表示.两个字节我就用两个字节表示. 只不过就是解析困难.

三丶代码中的宽字符窄字符

在代码中我们的宽字符窄字符就可以互相使用了.

char str[] = "A"                                               Asc版本编码使用
wchar_t str[] = L"A"                                        Unicode版本
TCHAR str[] = TEXT("A")                                  兼容性版本使用.
TCHAR 是windows中的一个宏.如果你的当前程序属性设置的是ASC编码形式.
那么TCHAR就是char.如果是UNICODE 那么TCHAR就是 wchar_t类型.

TEXT()是一个宏.是一个连接符. 如果是char类型.那么链接符号就是空宏.
如果是wchar_t类型. 那么连接符就是 L. 
L表明是宽字符的意思.

他们在内存中的存储方式也不同了.

1.A版本 长度为1. 结尾一个0

2.U版本长度为2. 结尾两个0结束.

如果使用了不同版本的字符.那么就要使用对应的库来操作这些字符.

A版本.

  printf       strlen  strcat strcmp  strstr

U版本

  wprintf   wcslen  wcscat wcscmp wcsstrstr

关于字符串操作函数具体查询MSDN. 或者Google搜索一下.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java达人

Java中的堆和栈的区别

当一个人开始学习Java或者其他编程语言的时候,会接触到堆和栈,由于一开始没有明确清晰的说明解释,很多人会产生很多疑问,什么是堆,什么是栈,堆和栈有什么区别?更...

25560
来自专栏咸鱼不闲

fastjson 重复引用和循环引用问题

数据传输使用json格式再方便不过了。 fastjson 由阿里巴巴那伙人使用Java语言编写,号称最快的JSON库 前两天遇到一个问题 后台的数据转化为jso...

36840
来自专栏FD的专栏

写出形似QML的C++代码

我的第一个想法(居然?)是做个Embedded-DSL。不过C++又不是Ruby……随便搜了一下,发现了一篇文章,也只是利用了重载运算符和运算符优先级,看上去限...

7120
来自专栏项勇

笔记45 | 代码性能优化建议[转]

14860
来自专栏Petrichor的专栏

tensorflow编程: Building Graphs

每次都必须要指定一个graph作为as_default,并只能在该graph中进行一切操作。

16530
来自专栏java一日一条

在Java中如何避免“!=null”式的判空语句?

我整天都是在跟Java打交道。我在Java开发中最常用的一段代码就是用object != null在使用对象之前判断是否为空。这么做是为了避免NullPoint...

11110
来自专栏Java学习网

Java面试题系列之基础部分(六)——每天学5个问题

Java基础部分学习的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法,这些都是最基...

27150
来自专栏逸鹏说道

必备 .NET - C# 异常处理

欢迎查看首个“必备.NET”专栏。您可以在其中了解 Microsoft .NET Framework 领域的所有最新动态,无论是 C# vNext 的最新进展(...

29260
来自专栏机器之心

教程 | PyTorch内部机制解析:如何通过PyTorch实现Tensor

选自Github 机器之心编译 参与:朱乾树、黄小天 PyTorch 中的基本单位是张量(Tensor)。本文的主旨是如何在 PyTorch 中实现 Tens...

44950
来自专栏锦小年的博客

python学习笔记7.4-内建模块base64

有时候,我们用noepad++或者记事本打开图片或者程序等文件的时候会显示大量的乱码,主要原因是这些文件编码的时候并不是字符串编码的。如果我们想把这些文件正常显...

23490

扫码关注云+社区

领取腾讯云代金券