字符

字符梗概

  • ASCII字符集 → (GB2312,BIG5,GBK...) → unicode通用字符集 → utf-8 ,

    • ascii子符集,一个符号对应一个数字编号,数字编号即可以二进制形式表示这个字符
    • GB2312,BIG5,GBK等编码 ,是各个语言以自己国家语言为标准制定的字符编码规则
    • unicode,unicode 学术学会制作的全球统一化的通用字符集

      ,实现了跨语言、跨平台的文本转换与处理
    • utf-8,是一种变长编码与解码规则,ascii 字符集及其他常用字符集编码与解码用一个字节表示,而汉字编码与解码由 3 个字节表示
  • 关系

    • ascii 编码,表示 128 个英文字符与二进制间的关系,gbk

      编码是汉字编码,一个 ascii 字符由 1 个字节组成,一个汉字由多个字符组成;utf8
    • unicode 规定了不同字符在二进制上的表示形式,但是并没有规定改如何存储,有些需要 3 个字符,有些需要 2 个字符,想 a 这种字符,ascii 用一个字节就能表示,但是在 unicode 中会用 2 个字节,空间浪费
    • utf-8 解决 unicode 编码存储问题,它是一种变长的编码方式,ascii 码表里的字符仍然用一个字节来存储,一个汉字用 3 个字节来存储
  • 编码/解码模板

    编号 编码模板
    [0,127] 0???????
    [128,2047] 110????? 10??????
    [2048,65535] 1110???? 10?????? 10??????

string

type StringHeader struct {
Data uintptr
Len int
}
  • Data 存储的是数据,存储在只读内存中的,不能对已经定义的字符串进行修改

  • Len 表示存储数据占用的字节(byte)数,例eggo世界

    占用 10 个字节,前 4 个字母对应一个 unicode 码点,由 utf8 编码后由 3 个 unicode 表示,界同理

  • 示例

package main

import (
"fmt"
) /**
值类型:打印地址,直接用取值符(&)打印。
引用类型:打印地址,%p 打印
*/
func main() {
s1 := "eggo世界"
fmt.Printf("%c\n", s1[2]) // 字符串底层是只读的字节数组,可以通过索引获取值
fmt.Printf("s1: addr=%v,value=%v \n", &s1, s1)
fmt.Printf("s1: addr=%p\n", &s1) bs := ([]byte)(s1) // 重新分配内存,并拷贝s1的内容到[]byte切片中
bs[2] = 'o'
fmt.Printf("%c\n", bs[2])
// [101 103 111 111 228 184 150 231 149
// 140],228和184和150共同组成了世,231和149和140 共同组成了界
fmt.Printf("bs: value=%v \n", bs)
fmt.Printf("bs: addr=%p \n", bs)
}

最新文章

  1. your password has expired.to log in you must change it
  2. ABAP中的数据校验-备注
  3. Coder-Strike 2014 - Round 1 A. Poster
  4. 使用 CSS 去掉 iPhone 网页上按钮的超大圆角以及文本框圆角默认样式
  5. 怎样把excel一列分成多列
  6. 解决调用context.Session["NAME"]时总出现Object reference not set to an instance of an object.异常的方法
  7. MySQL Server-id的作用
  8. Android实例-TRectangle加载图片(XE8+小米2)
  9. Ubuntu1404+Django1.9+Apache2.4部署配置2配置文件设置
  10. box-size
  11. Python print 输出到控制台 丢数据
  12. nginx 将请求全部指向到一个页面
  13. SpringBoot完美配置阿里云的文件上传
  14. JS中的算法与数据结构——排序(Sort)
  15. angularjs学习第八天笔记(指令作用域研究)
  16. datagrid数据表格当数据为0的时候页面不显示数据
  17. 【Loadrunner基础知识】web_get_int_proterty
  18. Random 中的种子怎么理解
  19. iOS开发者帐号申请指南
  20. 解决ie img标签内存泄漏

热门文章

  1. 【Mybtais】Mybatis 插件 Plugin开发(一)动态代理步步解析
  2. CCNA 第二章 以太网回顾
  3. Java 给Word添加数字签名
  4. 理解RESTful架构——Restful API设计指南
  5. SSH自动断开连接的原因-20200323
  6. mate-notification-daemon stopping, Mate notifications timeout
  7. mysql基础之mariadb库管理和表管理语句
  8. LTC4020锂电池充电模块开发记录
  9. Winsock2使用记录
  10. Angular环境搭建及简单体验