zoukankan      html  css  js  c++  java
  • 8.30Go之字符类型(byte和rune)

    8.30Go之字符类型(byte和rune)

    字符

    概念:

    • 我们可以把一个字符串理解成为一个字符数组,字符串的每一个索引对应的值就是字符

    示例:

    str := "Hello"
    /*
    str是一个字符串,那么它是由字符数组组成。
    字符数组分别的值是'H'、'e'、'l'、'l'、'o'
    */

    Go语言当中的字符

    • uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符(这是一种无符号类型)。

    • 另一种是 rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型等价于 int32 类型(这是一种有符号类型)。

    byte 类型是 uint8 的别名

    示例:

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

    Go语言支持 Unicode(UTF-8),字符称为 Unicode 代码点或者 runes,在内存中使用 int 来表示。

    格式:

    U+hhhh一个h表示一个16进制数

    书写Unicode字符需要使用到前缀:

    使用 4 字节,使用u前缀,使用 8 个字节,使用U前缀。

    package main

    import "fmt"

    func main() {
    var ch int = 'u0041'
    var ch2 int = 'u03B2'
    var ch3 int = 'U00101234'
    fmt.Printf("%d - %d - %d ", ch, ch2, ch3) // integer
    fmt.Printf("%c - %c - %c ", ch, ch2, ch3) // character
    fmt.Printf("%X - %X - %X ", 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 包中内置了一些用于测试字符的函数,这些函数的返回值都是一个布尔值:

    • 判断是否为字母:unicode.IsLetter(ch)

    • 判断是否为数字:unicode.IsDigit(ch)

    • 判断是否为空白符号:unicode.IsSpace(ch)

    UTF-8编码与Unicode字符集的区别

    Unicode是一种字符集:

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

    字符集为每个字符分配一个唯一的 ID

    UTF-8是编码规则:

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

    • 0xxxxxx 表示文字符号 0~127,兼容 ASCII 字符集。

    • 从 128 到 0x10ffff 表示其他字符。

    It's a lonely road!!!
  • 相关阅读:
    eclipse快捷键
    eclipse跑jfinal项目遇到的种种坑,java.lang.NoSuchMethodError
    ./configure ,make ,make install命令
    解决docker,ubuntu镜像中没有vi/vim
    使用qr生成二维码
    shell重定向
    ubuntu16.04启动rabbitmq报错
    HandlerMapping
    springMVC中绑定参数的常用注解
    mybatis的缓存机制
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15207412.html
Copyright © 2011-2022 走看看