win32编程 编码问题
来源:互联网 发布:mac虚拟机打游戏 编辑:程序博客网 时间:2024/06/08 06:50
一、NMAKE和Makefile
NMAKE - 命令解释器,根据Makefile文件中定义的脚本,完成项目的编译等操作
Makefile - 定义编译/链接等脚本语言
/////////////////////////////////////////////////////////////////////////
Makefile文件的编写
新建Makefile.mak文件记事本打开写入
window.exe:window.obj //依赖行,根据obj是否被修改过判断是否重新生成exe
cl.exe window.c /c //命令行,前面必须用tab键
link.exe window.obj user32.lib
dos中输入命令nmake /f Makefile.mak
此时生成window.obj 和 window.exe
根据时间戳确定是否需要重新编译链接。间隔~2s
//////////////////////////////////////////////////////////////
利用宏定义替换
CPP=cl.exe
CPP_FLAG="/c"
LINK32=link.exe
LINK_LIB=user32.lib
ALL:CLEAN
@echo 正在组建
$(CPP) $(CPP_FLAG) window.c
$(LINK32) $(LINK_LIB) window.obj /out:window.exe
CLEAN:
@echo 正在删除
del window.exe
INSTALL:
////////////////////////////////////////////////////////////////
执行过程
1.NMAKE首先找到第一个依赖行,根据依赖行之间的关系建立依赖树
例如 A:B
B:C
C:D
NMAKE会建立对应的依赖树
A
|-B
|-C
|-D
2.NMAKE执行D的命令行,依次执行父节点的命令行
3.在A的命令行执行结束后退出NMAKE
4.如果需要执行指定的依赖行需要在执行NMAKE时增加依赖行名称 如
NMAKE /f Makefile.mak B //<--指定从B执行
/////////////////////////////////////////////////////////////////
切换代码页实现字符输出SetConsoleCP函数 //头文件windows.h
BOOL SetConsoleCP(
UINT wCodePageID // code page
);
SetConsoleOutputCP函数 //修改控制台字符集函数
BOOL SetConsoleOutputCP(
UINT wCodePageID // code page
);
单字节字符和字符串 char cText='A'; char* pszText="ABCD";每个字符占一个字节
双字节字符 wchar_t cText='A'; wchar_t* pszText=L"ABCD"; 每个字符占两个字节
printf()打印不出字符串。因为假设A字符的双字节编码是0x0041,在内存中存放方式
是4100 printf在输出41后00被当做结束符,只能输出一个字符
宽字节字符的打印函数 wprintf(L"%s",ch);
C语言函数因为字符集的问题存在不同的版本
获取宽字节字符串长度的函数 wcslen(要求的字符串); //"ABCD"长度是4
TCHAR 为了程序中方便的支持Unicode和多字节字符等
所以使用TCHAR来定义字符和字符串
根据_UNICODE宏开关将TCHAR编译成不同字符类型
/////////////////////////////////////////////////////////////////
实现方法:
#ifndef _UNICODE
typedef char TCHAR
#define _T(x) x
#else
typedef wchar_t TCHAR
#define _T(x) L##x
#endif
使用时添加 TCHAR.H 头文件支持,使用_UNICODE宏开关进行编译
在TCHAR.H 头文件前添加 #define _UNICODE 支持多编译器
///////////////////////////////////////////////////////////////////
定义方式 : TCHAR * pszText = _T("ABCD");
代码使用 :使用UNICODE宏开关,通知编译器选择编译的代码
#ifndef _UNICODE
int nlen = strlen(pszText);
#else
int nlen = wcslen(pszText);
#endif
////////////////////////////////////////////////////////////////
Unicode 的控制台打印
WriteConsole函数为windows的API
Unicode为世界上所有语言的字符集
win32 API的定义
每个API对于多字节字符和UNICODE分别有不同的版本
MessageBox
MessageBoxA 多字节字符
MessageBoxW UNICODE字符
打开UNICODE开关
在StdAfx.h头文件中#include<windows.h>前加上#define UNICODE
字符的定义使用TEXT宏
TCHAR *pszText =TEXT("ABCD");
win32 字符转换函数
MultiByteToWideChar
WideCharToMultiByte (win32 day02PM0350)
- win32编程 编码问题
- Win32-00 Windows编程前奏--字符串编码
- Java编程中的编码问题
- Java编程中的编码问题
- 关于编程中的编码问题
- Python编程中的编码问题
- Win32编程
- Win32编程
- Win32 字符编码
- WIN32字符编码
- Win32编码转换
- win32 编码转化函数
- [Win32][C++]编码转换
- Win32 字符编码
- Win32 - 关于UNICODE编码
- win32字节+编码处理
- 继续讨论win32下的多线程编程问题
- Win32 网络编程中fd_set类型重定义问题
- 1072:找规律填数字
- dclusr.dll
- EBS开发附件上传和下载功能
- Ubuntu Linux 环境变量PATH设置
- 【学习笔记1 --- Cocos2d-x开发环境配置 + Win7 + VS2010】
- win32编程 编码问题
- iOS开发之不得不会的gdb命令
- Scrum团队和直线组织兼容吗?
- 使用Xcode和Instruments调试解决iOS内存泄露
- 开源托管
- 英文验证码加干扰线
- 让员工感觉你的想法就是他们自己的想法
- "潮湿的"Scrum
- Python - 元组(tuple) 详解 及 代码