PoEdu-Windows班-002 常用字符类型及转换

2024-06-14 21:08

本文主要是介绍PoEdu-Windows班-002 常用字符类型及转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Windows数据类型
  • 微软将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
它本意是一个 32bit的地址值, 用来存放 32bit地址值的类型
但是在 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;
}


这篇关于PoEdu-Windows班-002 常用字符类型及转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061512

相关文章

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g