c中的char与.net中的char

本文探讨了C语言和.NET中char类型的区别,以及在字符数组中存储汉字的原理。C语言中的char占1字节,适合ASCII字符,而.NET中的char占2字节,可存储更多字符包括汉字。UTF-8作为Unicode的一种实现,通过变长编码方式节省空间,能够存储不同长度的字符。字符数组能存汉字是因为UTF-8编码下,汉字由多个字节表示。
摘要由CSDN通过智能技术生成

字符:字母、数字、符号、汉字都是字符
1Byte(字节) = 8bit(比特、位)

- c中的char

在c语言中,一个char类型的变量是1字节,1字节 = 8位,能存2^8 = 256个字符(0-255,0也算一个)。分别对应ASCII表里的字符。键盘上的字母、符号刚好存完,所以没办法存中文。
在这里插入图片描述

*- .net中的char

在.net中,一个char类型的变量是2字节,在vs中将光标移动到char上会显示“将字符表示为UTF-16代码单位"(采用双字节编码标准对字符进行编码),意思就是一个char是16位,2个字节。2^16=65536(能存
0-65535个字符)。所以不仅能存字符、符号,还能存中文
在这里插入图片描述

- 疑惑

那么新的问题来了,按照上面的逻辑,在c语言中,字符数组应该只能存一个个的字符,为什么能存汉字?

在这里补充一下
Unicode 与 UTF-8Unicode 本质上是一种标准,它们描述了一个字符集里都有什么字符。
而 UTF-8、UTF-16 等是对 Unicode 的实现,他们采用了不同的映射关系来编码字符。
以 UTF-8 为例,在 UTF-8 中,一个汉字一般采用两个代码单元(code unit)来编码一个代码点(code point)。代码点(code point)指的是一个字符对应的编码表示,而这个编码表示可能是一个字节,也可能是两个字节,或更多。对于 UTF-8 来说,他使用一个字节来描述一个代码单元,也就是说,一个代码点可以由一个或多个代码单元表示。为什么要这么做?因为 UTF-8 是一种非常巧妙的字符集,他通过其巧妙的编码方式实现了代码点可变长这一特点。对于 ASCII 字符仅使用一个字节储存,而对于某个汉字则可能使用两个字节,节省空间。

上面说了一大堆让人迷迷糊糊,可不是我说的,我复制的。
大致意思是以UTF-8为例,
你如果往字符数组里存单字节的字符(字母\符号),它会记下来,这个字节的空间存的是单字节的东西,翻译的时候翻译为单字节字符。
你如果往字符数组里存汉字,它会记下来,这连着的两个字节的空间存的是双字节的东西,翻译的时候翻译为汉字字符。

翻译:数据存到计算机中全是0、1代码,用的时候翻译成字符

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值