Go探索-String
字符
字符梗概
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 个字节来存储
- ascii 编码,表示 128 个英文字符与二进制间的关系,gbk
编码/解码模板
编号 编码模板 [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的更多相关文章
- String比较相等的问题探索
String比较相等的问题探索 工作上,有个同事犯了个低级错误,把字符串的计较用了==.由于代码已经交付客户,上了生产环境,给公司带了了损失.于是看了他的代码,自己根据以前学的知识,写了几个小demo ...
- 【C++探索之旅】第二部分第一课:面向对象初探,string的惊天内幕
内容简单介绍 1.第二部分第一课:面向对象初探.string的惊天内幕 2.第二部分第二课预告:掀起了"类"的盖头来(一) 面向对象初探,string的惊天内幕 上一课<[C ...
- C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能
本文通过ANTS Memory Profiler工具探索c#中+.string.Concat.string.Format.StringBuilder.Append四种方式进行字符串拼接时的性能. 本文 ...
- String的split()方法探索和大揭秘
事实上没打算写这么一篇博文的,可是昨天在逛论坛的时候,发现一帖子,然后我又把帖子的内容在群里发了一通,结果出现了让人吃惊的结果,所以这里简单的给大家分享一下split()方法,免得大伙儿以后还会出现这 ...
- Java探索之旅(13)——字符串类String
1.初始化 String类是Java预定义类,非基本类型而是引用类型. public class StudyString { public static void main(String[] args ...
- Java内存管理-探索Java中字符串String(十二)
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 一.初识String类 首先JDK API的介绍: public final class String extends O ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
- 04.移动先行之谁主沉浮----XAML的探索
如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点) 移动先行之谁主沉浮? 带着你的Net飞奔吧! 链接======>(点) XMAL引入 XAML 类似于 HTML,是一种 ...
- 计算机程序的思维逻辑 (29) - 剖析String
上节介绍了单个字符的封装类Character,本节介绍字符串类.字符串操作大概是计算机程序中最常见的操作了,Java中表示字符串的类是String,本节就来详细介绍String. 字符串的基本使用是比 ...
随机推荐
- POJ2553 强连通出度为0的应用
题意: 给你一个有向图,然后问你有多少个满足要求的点,要求是: 这个点能走到的所有点都能走回这个点,找到所有的这样的点,然后排序输出. 思路: 可以直接一遍强连通缩点,所点之后 ...
- 堆栈上的舞蹈之释放重引用(UAF) 漏洞原理实验分析
0x01 前言 释放重引用的英文名名称是 Use After Free,也就是著名的 UAF 漏洞的全称.从字面意思可以看出 After Free 就是释放后的内存空间,Use 就是使用的意思,使用释 ...
- node-OS&Domain&Net&Path
OS--------------------------------------------- Node.js os 模块提供了一些基本的系统操作函数. var os = require(" ...
- C++ Log日志系统
闲得无聊,瞎写的一个东西. 好多地方能够优化甚至可能重写,也没写,就记下了个思路在这里. 主要熟练一下C++17的内容. version = 0.1 lc_log .h 1 #pragma once ...
- 【python】Leetcode每日一题-删除有序数组中的重复项
[python]Leetcode每日一题-删除有序数组中的重复项 [题目描述] 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现一次 ,返回删除后数组的新长度. 不要 ...
- Python数模笔记-Sklearn(3)主成分分析
主成分分析(Principal Components Analysis,PCA)是一种数据降维技术,通过正交变换将一组相关性高的变量转换为较少的彼此独立.互不相关的变量,从而减少数据的维数. 1.数据 ...
- 推荐一个不得不知道的 Visual Studio 快捷键
不得不说,Visual Studio 内置了很多非常棒的快捷键,借助于这些快捷键我们甚至不需要再使用鼠标,就可以快速高效的编写代码,因此学习和熟悉这些快捷键是值得的. 其中有一个快捷键是我非常喜欢,也 ...
- 一种巧妙的使用 CSS 制作波浪效果的思路
在之前,我介绍过几种使用纯 CSS 实现波浪效果的方式,关于它们有两篇相关的文章: 纯 CSS 实现波浪效果! 巧用 CSS 实现酷炫的充电动画 本文将会再介绍另外一种使用 CSS 实现的波浪效果,思 ...
- CLS的探索:Python如何让日志免费云化
前言 日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集.日志存储到日志检索,图表分析.监控告警.日志投递等多项服务,协助用户通过日志来解决业务运 ...
- Azure Storage 利用 azCopy 复制迁移数据
一,引言 前两天遇到了Azure Blob Storage 需要迁移到另外的一个 Azure Blob Storage 中.手动下载.上传已经无法满足了,得另寻一种方式了 AzCopy.Azure 为 ...