字符串中的每一个元素叫做“字符”,在遍历或者单个获取字符串元素时可以获得字符

golang语言的字符有如下两种:

  • 一种是uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符
  • 另一种是rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型等价于 int32 类型

byte

所谓字符类型是用单引号括起来的单个字符

byte 类型是 uint8 的别名,对于只占用 1 个字节的传统 ASCII 编码的字符来说,完全没有问题,例如 var ch byte = ‘A’,字符使用单引号括起来。

用单引号括起来的单个字符是字符类型,用双引号括起来的字符是字符串类型

在 ASCII 码表中,A 的值是 65,使用 16 进制表示则为 41,所以下面的写法是等效的:

var ch byte = 65 或 var ch byte = '\x41'      //(\x 总是紧跟着长度为 2 的 16 进制数)

另外一种可能的写法是\后面紧跟着长度为 3 的八进制数,例如 \377。

字符的定义

package mainimport "fmt"func main(){var ch bytech = 'a'fmt.Printf("%c, %d\n", ch, ch)ch = 97fmt.Printf("%c, %d\n", ch, ch)//计算机不能直接存储字符类型,只能转成数字(’ASCII’码)存储, a的ASCII码是97
}

输入一个字符

package mainimport "fmt"func main(){var ch bytefmt.Scanf("%c", &ch)fmt.Printf("%c, %d\n", ch, ch)
}

转义字符字符

计算机中除了普通字符之外,还有一种特殊字符—转义字符, 比如

  • ":表示一个英文半角的双引号
  • \t:表示一个tab键的空格(可以用来对输出的内容进行排版)
package mainimport "fmt"func main(){fmt.Printf("注意\"基础知识\"要打牢\n")fmt.Printf("C++\tRust\tGo\n")fmt.Printf("D:\\software")
}

rune

golang语言同样支持Unicode(UTF-8),因此字符同样称为Unicode代码点或者runes,并在内存中使用int来表示。在文档中,一般使用格式 U+hhhh 来表示,其中 h 表示一个 16 进制数。

在书写 Unicode 字符时,需要在 16 进制数之前加上前缀\u或者\U。因为 Unicode 至少占用 2 个字节,所以我们使用 int16 或者 int 类型来表示。如果需要使用到 4 字节,则使用\u前缀,如果需要使用到 8 个字节,则使用\U前缀。

var ch int = '\u0041'
var ch2 int = '\u03B2'
var ch3 int = '\U00101234'
fmt.Printf("%d - %d - %d\n", ch, ch2, ch3) // integer
fmt.Printf("%c - %c - %c\n", ch, ch2, ch3) // character
fmt.Printf("%X - %X - %X\n", ch, ch2, ch3) // UTF-8 bytes
fmt.Printf("%U - %U - %U", ch, ch2, ch3)   // UTF-8 code point


格式化说明符%c用于表示字符,当和字符配合使用时,%v或%d会输出用于表示该字符的整数,%U输出格式为 U+hhhh 的字符串。

Unicode 包中内置了一些用于测试字符的函数,这些函数的返回值都是一个布尔值,如下所示(其中 ch 代表字符):

  • 判断是否为字母:unicode.IsLetter(ch)
  • 判断是否为数字:unicode.IsDigit(ch)
  • 判断是否为空白符号:unicode.IsSpace(ch)

UTF-8 和 Unicode 有何区别?

Unicode 与 ASCII 类似,都是一种字符集。

字符集为每个字符分配一个唯一的ID,我们使用到的所有字符在Unicode字符集中都有一个唯一的ID,如上面例子中的 a 在 Unicode 与 ASCII 中的编码都是 97。汉字“你”在 Unicode 中的编码为 20320,在不同国家的字符集中,字符所对应的 ID 也会不同。而无论任何情况下,Unicode 中的字符的 ID 都是不会变化的。

UTF-8 是编码规则,将 Unicode 中字符的 ID 以某种方式进行编码,UTF-8 的是一种变长编码规则,从 1 到 4 个字节不等。编码规则如下:

  • 0xxxxxx 表示文字符号 0~127,兼容 ASCII 字符集。
  • 从 128 到 0x10ffff 表示其他字符。

根据这个规则,拉丁文语系的字符编码一般情况下每个字符占用一个字节,而中文每个字符占用 3 个字节。

广义的 Unicode 指的是一个标准,它定义了字符集及编码规则,即 Unicode 字符集和 UTF-8、UTF-16 编码等。

golang:字符类型(byte和rune)相关推荐

  1. GoLang之数据类型byte、rune

    文章目录 GoLang之数据类型byte.rune 1.字符 2.字符分类 3.byte 3.1范围 3.2不加''正常输出 3.3加''赋值时输ASCII码 3.4赋值字母必须加'' 3.5不能加& ...

  2. golang中的byte与rune

    byte与rune byte与rune类型有一个共性,即:它们都属于别名类型.byte是uint8的别名类型,而rune则是int32的别名类型. byte类型的值需用8个比特位表示,其表示法与uin ...

  3. Golang 的类型与零值

    Golang 中定义不同类型的变量,不是通过声明就是通过 make 或 new . 未显式初始化时,将被赋予一个默认值,该默认值便为该类型的零值.不同的类型有不同的零值. 类型 类型名 零值 字符类型 ...

  4. bool类型数组转换成一个整数_Go 学习笔记 02 | 基本数据类型以及 byte 和 rune 类型...

    一.基本数据类型 unsafe.Sizeof() 查看不同长度的整型在内存中的存储空间. 类型转换,高位向低位转换要注意溢出. 数字字面量语法. 64 位系统中 Go 语言中浮点数默认是 float6 ...

  5. string、byte、rune和字符在go中的区别的

    // \xe4\xb8\xad utf8: e4b8ad, U+4E2D, 中// \xe5\x9b\xbd utf8: e59bbd, U+56FD, 国// \xe4\xba\xba utf8: ...

  6. golang bytes包 []byte 字节切片 简介

    // 转换// 将 s 中的所有字符修改为大写(小写.标题)格式返回. func ToUpper(s []byte) []byte func ToLower(s []byte) []byte func ...

  7. 7.Go语言基本类型 —— 字符类型

    字符类型 Golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存. 字符串就是一串固定长度的字符连接起来的字符序列.Go的字符串是由单个字节连接起来的.也就是说对于传统的 ...

  8. golang枚举类型 - iota用法拾遗

    在c#.java等高级语言中,经常会用到枚举类型来表示状态等.在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手. 1.枚举类型定义 从百度百科查询解释如下:http://baike ...

  9. Oracle数据类型及存储方式——字符类型篇

    注:这篇文章绝大部分都摘抄于袁光东先生的  <<oracle小组学习笔记>>. 下面会对各种字符类型作详细解释. 一. char 类型 oracle 可以定义1个char(n) ...

最新文章

  1. 统计决策理论1 统计问题与统计决策
  2. php-dev离线安装,局域网 pm2 离线安装
  3. 普通程序员如何转向AI方向
  4. 【B站视频教程笔记】基于VSCode和CMake实现C/C++开发 | Linux篇(gcc/g++)(安装、配置、使用详细教程)(VSCode教程)(CMake教程)(精!)
  5. 【线性筛】【质因数分解】【约数个数定理】hdu6069 Counting Divisors
  6. SpringMVC请求参数乱码问题
  7. Neo4j从mysql读取数据_[bigdata-086] python3+neo4j 从mysql数据库读取记录然后创建节点和关系写入到neo4j...
  8. python文件内容倒序_python实现对列表中的元素进行倒序打印
  9. RFID技术正助力物流行业进入新时代
  10. SQL Server中的窗口函数
  11. 手机邮箱怎么弄_如何设置Android手机邮箱的详细教程
  12. 一个美女引发的两次灭国之战
  13. 逆向工程(MyBatis)
  14. 对应的cuda版本 显卡驱动版本_cuda和显卡驱动版本
  15. 您可以在Windows PC或Android手机上使用iMessage吗?
  16. 谷歌浏览器的本地收藏夹在什么位置?
  17. RuoYi-App启动教程
  18. 【Jeoy‘ s daily 】AcWing 1275. 最大数 线段树
  19. 超好用的电视盒第三方软件,4K画质观看~文末有李克勤歌曲哦
  20. 【题解】洛谷P4996[【LGR-055】洛谷11月月赛]C.咕咕咕 组合数

热门文章

  1. 使用LOL盒子的数据查询简单的战斗力信息
  2. ssh登录主机报错: Unable to negotiate with 172.222.222.243 port 22: no matching key exchange method found.
  3. 使用SpEL表达式来获取SpringData Jpa在更新数据时传递的对象参数的属性
  4. 关于eclipse无法连接手机调试问题
  5. 4K屏幕/高分辨率屏幕运行VMware虚拟机图标字体太小问题解决方案(linux系统)
  6. 怎么用python画螺旋_用Python tu绘制螺旋
  7. 计算机硬件发展慢,老电脑卡慢应该更换哪些硬件?看完秒懂
  8. Python练习题——coffee
  9. vue引入html报错
  10. 贵州大学计算机类是211吗,贵州大学排名,唯一一所211排名一百以后,本科一批只有两所...