PoEdu-Windows班-002 常用字符类型及转换
来源:互联网 发布:网络管理 委托代理 编辑:程序博客网 时间:2024/06/01 18:43
Windows数据类型
Windows数据类型简介
下面列举一些比较常见的数据类型, 看到了就得认识.
BYTE
WORD
DWORD
QWORD
DWORD_PTR
#if ( defined(__midl) && (501 < __midl) )
typedef [public] __int3264 INT_PTR, *PINT_PTR;
typedef [public] unsigned __int3264 UINT_PTR, *PUINT_PTR;
typedef [public] __int3264 LONG_PTR, *PLONG_PTR;
typedef [public] unsigned __int3264 ULONG_PTR, *PULONG_PTR;
#else // midl64
// old midl and C++ compiler
#if defined(_WIN64)
typedef __int64 INT_PTR, *PINT_PTR;
typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
typedef __int64 LONG_PTR, *PLONG_PTR;
typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
#define __int3264 __int64
#else
typedef _W64 int INT_PTR, *PINT_PTR;
typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
typedef _W64 long LONG_PTR, *PLONG_PTR;
typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;
#define __int3264 __int32
#endif
#endif // midl64
但是在 64位操作系统中, 它也能存放 64位的地址值
这就是向上兼容
DWORD32
DWORD64
DWORDLONG
LPWSTR
LPSTR
LPCWSTR
LPCSTR
error_status_t
FLOAT
HANDLE
TCHAR
HCALL
HRESULT
INT
INT8
INT16
INT32
INT64
LMCSTR
LMSTR
LONG
LONGLONG
LONG_PTR
LONG32
LONG64
LPVOID
SHORT
SIZE_T
UCHAR
STRING
UINT
UINT8
UINT16
UINT32
UINT64
ULONG
ULONG_PTR
ULONG32
ULONG64
ULONGLONG
USHORT
VOID
字符编码
UTF-8
UTF-16
UTF-32
他们之间都可以进行相互转换
求长度:
- 微软将C语言的数据类型进行了单纯的包装, 形成了大量的自己的类型.
- 这些类型只基于Windows SDK中.
- 它是没有原生bool类型的.
Windows数据类型简介
- 按照规范, 所有的Windows类型都应在 WinDef.h 中找到。
- 可是, 微软经过这么多年的发展, 数据类型定义已经略乱, 只能借助Visual Studio的转到定义功能进行查看
- 这些类型是 Windows进行定义的, 也就是说, 它们不是C标准通用的。
- 很多数据类型都是一样的, 只不过换了一种写法, 为了使语义更加通顺。
下面列举一些比较常见的数据类型, 看到了就得认识.
BYTE
- typedef unsigned char BYTE;
WORD
- typedef unsigned short WORD;
DWORD
- typedef unsigned long DWORD;
QWORD
- typedef unsigned __int64 QWORD;
- PS:VS2015以上才有的数据类型
DWORD_PTR
#if ( defined(__midl) && (501 < __midl) )
typedef [public] __int3264 INT_PTR, *PINT_PTR;
typedef [public] unsigned __int3264 UINT_PTR, *PUINT_PTR;
typedef [public] __int3264 LONG_PTR, *PLONG_PTR;
typedef [public] unsigned __int3264 ULONG_PTR, *PULONG_PTR;
#else // midl64
// old midl and C++ compiler
#if defined(_WIN64)
typedef __int64 INT_PTR, *PINT_PTR;
typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
typedef __int64 LONG_PTR, *PLONG_PTR;
typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
#define __int3264 __int64
#else
typedef _W64 int INT_PTR, *PINT_PTR;
typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
typedef _W64 long LONG_PTR, *PLONG_PTR;
typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;
#define __int3264 __int32
#endif
#endif // midl64
- typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR
但是在 64位操作系统中, 它也能存放 64位的地址值
这就是向上兼容
DWORD32
- typedef unsigned int DWORD32, *PDWORD32;
DWORD64
- typedef unsigned __int64 DWORD64, *PDWORD64;
DWORDLONG
- typedef unsigned __int64 ULONGLONG;
- typedef ULONGLONG DWORDLONG;
LPWSTR
- typedef wchar_t WCHAR;
- typedef Null_terminated WCHAR *NWPSTR, *LPWSTR, *PWSTR;
- LONG POINTER WIDE STRING
LPSTR
- typedef char CHAR;
- typedef Null_terminated CHAR *NPSTR, *LPSTR, *PSTR;
- LONG POINTER (ANSI) STRING
LPCWSTR
- typedef Null_terminated CONST WCHAR *LPCWSTR, *PCWSTR;
- LONG POINTER CONST WIDE STRING
LPCSTR
- typedef Null_terminated CONST CHAR *LPCSTR, *PCSTR;
- LONG POINTER CONST (ANSI) STRING
error_status_t
- 本质是 unsigned long
- 通过GetLastError获取
FLOAT
- typedef float FLOAT
HANDLE
- typedef void* HANDLE
TCHAR
- 工程为 UNICODE(宽字节), TCHAR 则是 wchar_t
- 工程为 ANSI(多字节), TCHAR 则是 char
HCALL
- typedef DWORD HCALL
HRESULT
- typedef LONG HRESULT
INT
- typedef int INT;
INT8
- typedef char INT8
INT16
- typedef short INT16
INT32
- typedef int INT32
INT64
- typedef __int64 INT64
LMCSTR
- typedef const wchar_t* LMCSTR;
- VS2015以上版本才有
LMSTR
- typedef WCHAR* LMSTR;
- VS2015以上版本才有
LONG
- typedef long LONG;
LONGLONG
- typedef __int64 LONGLONG;
LONG_PTR
- typedef __int3264 LONG_PTR;
LONG32
- typedef int LONG32;
LONG64
- typedef __int64 LONG64;
LPVOID
- typedef const void* LPVOID;
SHORT
- typedef short SHORT;
SIZE_T
- typedef ULONG_PTR SIZE_T;
- 不同于 C++中的size_t类型, 需要注意
UCHAR
- typedef unsigned char UCHAR;
STRING
- typedef UCHAR* STRING;
UINT
- typedef unsigned int UINT;
UINT8
- typedef unsigned char UINT8;
UINT16
- typedef unsigned short UINT16;
UINT32
- typedef unsigned int UINT32;
UINT64
- typedef unsigned __int64 UINT64;
ULONG
- typedef unsigned long ULONG;
ULONG_PTR
- typedef unsigned __int3264 ULONG_PTR;
ULONG32
- typedef unsigned int ULONG32;
ULONG64
- typedef unsigned __int64 ULONG64;
ULONGLONG
- typedef unsigned __int64 ULONGLONG;
USHORT
- typedef unsigned short USHORT;
VOID
- typedef void VOID;
字符编码
UTF-8
- 最小单位就是8bit 可变长, 最少8bit, 多了可以在占用
UTF-16
- Windows用的就是UTF-16(从VISTA开始) --> 也就是Unicode
- 最小单位就是16bit 可变长, 最少16bit, 多了可以在占用
UTF-32
- 最小单位就是32bit 可变长, 最少32bit, 多了可以在占用
他们之间都可以进行相互转换
- 可以使用A2W和W2A,但要注意,返回的指针是new的,需要手动delete。
- 使用这2个宏之前,需要使用USES_CONVERSION这个宏。每一次使用都需要加上这个。
求长度:
- Strlen()函数求的是字符串占用的字节数,不包括结束符。一个汉字返回2.
- Wcslen()求出来的是有多少个“字符”,这里的“字符”指的是一个字、字母、符号等等。即一个汉字也是返回1.
GB2312到UTF-8的相互转换
//UTF-8到GB2312的转换char* U2G(const char* utf8){int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);wchar_t* wstr = new wchar_t[len+1];memset(wstr, 0, len+1);MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);char* str = new char[len+1];memset(str, 0, len+1);WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);if(wstr)
delete[] wstr;return str;}
//GB2312到UTF-8的转换char* G2U(const char* gb2312){int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);wchar_t* wstr = new wchar_t[len+1];memset(wstr, 0, len+1);MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);char* str = new char[len+1];memset(str, 0, len+1);WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);if(wstr)
delete[] wstr;return str;}
阅读全文
0 0
- PoEdu-Windows班-002 常用字符类型及转换
- PoEdu-Windows班-001操作系统
- PoEdu-Windows班-003 IO
- PoEdu-Windows班-009 多线程
- PoEdu-Windows班-004 文件操作
- PoEdu-Windows班-007 异步I/O
- Windows编程中一些常用的字符(串)类型转换
- PoEdu-Windows班-005 ListView控件的使用方法
- PoEdu-Windows班-006 INI文件操作API
- 字符、字符串、常用类型转换简介
- Java常用类型定义、转换及比较
- Java常用类型定义、转换及比较
- Java常用类型定义、转换及比较
- Windows WCHAR 到 Linux wchar_t 字符类型的转换
- Windows WCHAR 到 Linux wchar_t 字符类型的转换
- Perl中的数字比较、字符比较及类型转换
- 字符类型char、wchar_t等介绍,及中文转换显示
- postgresql常用函数及操作符及类型转换等
- 计蒜客 迷宫 (bfs)
- oracle 创建表空间
- 实际工作中:----FastDFS在项目中的应用
- 7-zip安装与使用
- Merge two Sorted linked lists
- PoEdu-Windows班-002 常用字符类型及转换
- Lavarel 自定义Artisan Console
- BeanUtils工具类的使用
- CentOS遇到kmod-microsoft-hyper-v-rhel63.3.5-20131212.x86_64 (installed)
- 【Hibernate】——持久化对象的三种状态
- pycharm django 初探
- JavaScript对象扩展(Object.is(), assign(), 对象遍历keys, es6原型介绍)
- 《SSH框架》---Struts2
- JavaWeb项目从零开始(2)--- spring、spring mvc、mybatis整合