字符

字符梗概

  • 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)
}

Go探索-String的更多相关文章

  1. String比较相等的问题探索

    String比较相等的问题探索 工作上,有个同事犯了个低级错误,把字符串的计较用了==.由于代码已经交付客户,上了生产环境,给公司带了了损失.于是看了他的代码,自己根据以前学的知识,写了几个小demo ...

  2. 【C++探索之旅】第二部分第一课:面向对象初探,string的惊天内幕

    内容简单介绍 1.第二部分第一课:面向对象初探.string的惊天内幕 2.第二部分第二课预告:掀起了"类"的盖头来(一) 面向对象初探,string的惊天内幕 上一课<[C ...

  3. C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能

    本文通过ANTS Memory Profiler工具探索c#中+.string.Concat.string.Format.StringBuilder.Append四种方式进行字符串拼接时的性能. 本文 ...

  4. String的split()方法探索和大揭秘

    事实上没打算写这么一篇博文的,可是昨天在逛论坛的时候,发现一帖子,然后我又把帖子的内容在群里发了一通,结果出现了让人吃惊的结果,所以这里简单的给大家分享一下split()方法,免得大伙儿以后还会出现这 ...

  5. Java探索之旅(13)——字符串类String

    1.初始化 String类是Java预定义类,非基本类型而是引用类型. public class StudyString { public static void main(String[] args ...

  6. Java内存管理-探索Java中字符串String(十二)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 一.初识String类 首先JDK API的介绍: public final class String extends O ...

  7. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

  8. 04.移动先行之谁主沉浮----XAML的探索

    如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点) 移动先行之谁主沉浮? 带着你的Net飞奔吧! 链接======>(点) XMAL引入 XAML 类似于 HTML,是一种 ...

  9. 计算机程序的思维逻辑 (29) - 剖析String

    上节介绍了单个字符的封装类Character,本节介绍字符串类.字符串操作大概是计算机程序中最常见的操作了,Java中表示字符串的类是String,本节就来详细介绍String. 字符串的基本使用是比 ...

随机推荐

  1. hdu4411 经典费用里建图

    题意:       给以一个无向图,0 - n,警察在0,他们有k个警队,要派一些警队去1--n个城市抓小偷, 问所有吧所有小偷全抓到然后在返回0的最小路径和是多少,当地i个城市被攻击的时候他会通知i ...

  2. Linux中环境变量的设置

    目录 环境变量 Shell定义的环境变量 查看环境变量 Linux下环境变量的设置 环境变量 在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软 ...

  3. Python中math和cmath模块的使用

    目录 Math模块 Cmath模块 Math模块 pi                数字常量,圆周率 e                 表示一个常量 sqrt(x)         求x的平方根 ...

  4. [CTF]当铺密码

    [CTF]当铺密码 ---------------------  作者:adversity`  来源:CSDN  原文:https://blog.csdn.net/qq_40836553/articl ...

  5. 大事件,Java被超越了,2021年5月TIOBE编程语言排行榜出炉

    TIOBE 头条 TIOBE 5月编程语言排行榜新鲜出炉.前十榜单中,C.Python.Java三大鳌头仍占据前三榜单.去年11月,Python短时间的挤掉Java跃居至榜单第二名:今年5月,Pyth ...

  6. 【python】Leetcode每日一题-螺旋矩阵2

    [python]Leetcode每日一题-螺旋矩阵2 [题目描述] 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix . ...

  7. layui处理表单/按钮进行多次提交

    在一个项目中,我们最频繁的操作是CRUD,所以一定有涉及到按钮的操作.比如:确认保存,确认编辑,确认删除等等.所以,为了避免表单进行多次提交就显得特别地重要. 代码实现 知识点 $(':button' ...

  8. idea设置js为ES6

  9. Docker搭建开发环境(Nginx+MySQL+PHP)

    注意事项 1.像MySQL配置文件.Nginx配置文件.网站根目录这种比较经常操作的需要先使用 docker cp 将文件从容器里复制到主机目录,docker run的时候直接挂载目录就可以了 2.d ...

  10. 最近做app项目中遇到的问题 以及一些常见注意事项

    最近做app项目中遇到的问题 1.时间兼容问题 var date = "2019-12-18 18:03:45" //不兼容代码 var newDate = new Date(da ...