C语言中字符和字符串处理(ANSI字符和Unicode字符)_C 语言

我们知道,C语言用char数据类型表示一个8位的ANSI字符,默认在代码中声明一个字符串时,C编译器会把字符串中的字符转换成由8位char数据类型构成的一个数组:

复制代码 代码如下:

// An 8-bit character
char c = 'A';
// An array of 99 8-bit character and 8-bit terminating zero
char szBuffer[100] = "A String";

Microsoft的C/C++编译器定义了一个内建的数据类型wchar_t,它表示一个16位的Unicode(UTF-16)字符。编译器只有指定了/Zc:wchar_t编译器开关时,才会定义这个参数类型。

声明Unicode字符和字符串的方法如下:

复制代码 代码如下:

// A 16-bit character
wchar_t c= L'A';
// An array up to 99 16-bit characters and a 16-bit terminating zero
wchar_t szBuffer[100] = L"A String";

字符串之前的大写字母L通知编译器该字符串应该编译一个Unicode字符串。

另外,在编写代码的时候,可以使用ANSI或Unicode字符/字符串使其能通过编译。WinNT.h定义了以下类型和宏:

复制代码 代码如下:

#ifdef UNICODE
typedef WCHAR TCHAR, *PTCHAR, PTSTR;
typedef CONST WCHAR *PCTSTR;
#define __TEXT(quote) L##quote
#else
typedef CHAR TCHAR, *PTCHAR, PTSTR;
typedef CONST CHAR *PCTSTR;
#define __TEXT(quote) quote
#endif
#define TEXT(quote) __TEXT(quote)

利用这些类型和宏来写代码,无论使用ANSI还是Unicode字符,都能通过编译,如下所示:

复制代码 代码如下:

// If UNICODE define, a 16-bit character; else an 8-bit character
TCHAR c = TEXT('A');
// If UNICODE define, an array of 16-bit character; else 8-bit character
TCHAR szBuffer[100] = TEXT("A String");

以上所述就是本文的全部Neri了,希望大家能够喜欢。

时间: 2024-10-28 09:53:40

C语言中字符和字符串处理(ANSI字符和Unicode字符)_C 语言的相关文章

C语言中等待socket连接和对socket定位的方法_C 语言

C语言listen()函数:等待连接头文件: #include <sys/socket.h> 定义函数: int listen(int s, int backlog); 函数说明:listen()用来等待参数s 的socket 连线. 参数backlog 指定同时能处理的最大连接要求, 如果连接数目达此上限则client 端将收到ECONNREFUSED 的错误. Listen()并未开始接收连线, 只是设置socket 为listen 模式, 真正接收client 端连线的是accept()

C语言中对文件最基本的读取和写入函数_C 语言

C语言read()函数:读文件函数(由已打开的文件读取数据)头文件: #include <unistd.h> 定义函数: ssize_t read(int fd, void * buf, size_t count); 函数说明:read()会把参数fd 所指的文件传送count 个字节到buf 指针所指的内存中. 若参数count 为0, 则read()不会有作用并返回0. 返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动.

C语言中对于循环结构优化的一些入门级方法简介_C 语言

一.代码移动 将在循环里面多次计算,但是结果不会改变的计算,移到循环外面去. 例子: 优化前: void lower1(char *s){ int i; for(i=0;i<strlen(s);++i) if(s[i]>='A'&&s[i]<='Z') s[i]-=('A'-'a'); } 优化后: void lower2(char *s){ int i; int len=strlen(s); for(int i=0;i<len;++i) if(s[i]>='

C语言中进程信号集的相关操作函数详解_C 语言

C语言sigismember()函数:测试某个信号是否已加入至信号头文件:#include <signal.h> 定义函数:int sigismember(const sigset_t *set, int signum); 函数说明:sigismember()用来测试参数signum 代表的信号是否已加入至参数set 信号集里. 如果信号集里已有该信号则返回1, 否则返回0. 返回值:信号集已有该信号则返回1, 没有则返回0.如果有错误则返回-1. 错误代码: 1.EFAULT 参数set 指

深入分析C语言中结构体指针的定义与引用详解_C 语言

指向结构体类型变量的使用首先让我们定义结构体:struct stu{char name[20];long number;float score[4];} ;再定义指向结构体类型变量的指针变量:struct stu *p1, *p2 ;定义指针变量p 1.p 2,分别指向结构体类型变量.引用形式为:指针变量→成员:[例7-2] 对指向结构体类型变量的正确使用.输入一个结构体类型变量的成员,并输出. 复制代码 代码如下: #include <stdlib.h> /*使用m a l l o c (

c语言中十进制转二进制显示小工具的实现代码_C 语言

计算器在显示二进制位数时候,如果开头是0.是不会显示的,对于在单片机混的人,这个有时候很麻烦,所以写个小工具. 功能就是输入十进制数字,然后显示出2进制,每显示4位一次空格,可以调整位数范围(8的倍数) 如果有谁能知道linux下类似win7的那个计算器,麻烦回复告知一下吧.很是感谢~ 例如: $ dec2bin 1 135Num 8 Binary is : 0B1000 0111done!=============================== $ dec2bin 2 135Num 16

c语言-C语言中如何把字符串&amp;amp;quot;2A&amp;amp;quot;转换成0x2A?

问题描述 C语言中如何把字符串"2A"转换成0x2A? 如题:C语言中如何把字符串""2A""转换成0x2A?有没有现成的函数,或者提供一直转换思路? 解决方案 思路:对字符串中每个字符判断是 0 到 9,还是 A 到 F对这两种情况进行处理,是第一种减去 0x30 就是对应的数字:第二种减去 'A',再加上 10.如果字母有小写的情况,也需要考虑. 解决方案二: 思路,手写的.int result = 0;for (int i = 0; i &

DropDownList下拉框 onchange事件中,获取字符串Desc 的前三个字符应该怎么写

问题描述 DropDownList下拉框 onchange事件中,获取字符串Desc 的前三个字符应该怎么写 数据绑定: ddlSelect.Attributes.Add("onchange", "onclick_select(this.options[this.selectedIndex].value)"); 这个只能获取到 ID ,this.options[this.selectedIndex].value) 要怎么修改才能获取到Desc de 前三个字符 ?

C语言中交换int型变量的值及转换为字符数组的方法_C 语言

不使用其他变量交换两个整型的值: #include <stdio.h> void main(){ int a = 3; int b = 4; a = a ^ b;//使用异或交换 b = b ^ a; a = a ^ b; printf("%d, %d\n", a, b); a = a - b;//使用加减交换 b = a + b; a = b - a; printf("%d, %d\n", a, b); a ^= b ^= a ^= b; printf

C语言 以字符形式读写文件详解及示例代码_C 语言

在C语言中,读写文件比较灵活,既可以每次读写一个字符,也可以读写一个字符串,甚至是任意字节的数据(数据块).本节介绍以字符形式读写文件. 以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件中写入一个字符.主要使用两个函数:fgetc()和fputc(). 字符读取函数 fgetc fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符.它的原型为: int fgetc (FILE *fp); fp 为文件指针.fgetc() 读取成功时返回读取到的字符,