Go 字节 (byte) & 文字符号 (rune)
byte
通过 byte 定义一个字节,字节必须使用单引号包起来,直接打印字节输出的是 ascii 码,需要通过格式化输出
byte 是 uint8 的别称,使用 byte 主要是为了区分字节和无符号整型两种类型
示例:
func main() {
var a byte
fmt.Printf("%v, type: %T, char: %c", a, a, a)
}
输出:
0, type: uint8, char:
rune
通过 rune 定义一个字符,字符必须使用单引号包起来
rune 是 int32 的别称,使用 rune 主要是为了区分字符和整型两种类型
示例:
func main() {
var a rune
fmt.Printf("%v, type: %T, char: %c\n", a, a, a)
}
输出结果:
0, type: int32, char:
byte & rune
byte 表示一个字节,可以表示英文字符等占用一个字节的字符,占用多于一个字节的字符就无法正确表示,例如占用 3 个字节的汉字
rune 表示一个字符,用来表示任何一个字符
示例:
func main() {
a := "你好,hello"
b := []byte(a)
c := []rune(a)
fmt.Printf("b: %v\ntype: %T\n\nc: %v\ntype: %T", b, b, c, c)
}
输出结果:
b: [228 189 160 229 165 189 239 188 140 104 101 108 108 111]
type: []uint8
c: [20320 22909 65292 104 101 108 108 111]
type: []int32
可以看出 byte 并不能正确解析超过 1 byte 的字符,需要使用 rune
转换
byte 和 rune 之间可以转换,byte 转向 rune 时不会出错
但是 rune 转向 byte 时会出现问题:
如果 rune 表示的字符只占用一个字符,不超过 uint8 时不会出错;超过时直接转换编译无法通过,可以通过引用转换,但是会舍去超出的位,出现错误结果
示例:
func main() {
char := '你'
v1 := rune(char)
v2 := byte(char)
s1 := strconv.FormatInt(int64(v1), 2)
s2 := strconv.FormatInt(int64(v2), 2)
fmt.Printf("v1: %c, type: %T, %v\n", v1, v1, s1)
fmt.Printf("v2: %c, type: %T, %v\n", v2, v2, s2)
}
输出结果:
v1: 你, type: int32, 100111101100000
v2: `, type: uint8, 1100000
Go 字节 (byte) & 文字符号 (rune)的更多相关文章
- 字节(byte)与位(bit)基础回顾
预估方式:一个uid,String类型,最长约50字节,即50Byte,一天100亿PV,则100亿*50Byte,约500G容量存ES中或Hbase中,无法存日志文件中,一个docker磁盘才50G ...
- 计算机中位(bit), 字节(byte), 字(word)的关系
1.位(bit) 来自英文bit,音译为“比特”,表示二进制位.位是计算机内部数据储存的最小单位,11010100是一个8位二进制数.一个二进制位只可以表示0和1两种状态(21):两个二进制位可以表示 ...
- 位bit,字节byte,K,M,G(转)
字节是由8个位所组成,可代表一个字符(A~Z).数字(0~9).或符号(,.?!%&+-*/),是内存储存数据的基本单位.1 byte = 8 bit 1 KB = 1024 bytes1 ...
- 比特(bit)和字节(Byte)
比特(bit)和字节(Byte) 基础的内容就不说了,这里是一个小的学习笔记 比特和字节的写法差异与应用场景 标准的写法中,正如标题中写的那样,是通过大小写来区分比特和字节的:比特的b应该是小写,而字 ...
- 位bit——字节Byte???
1.换算 每8个位(bit)组成一个字节(byte) 位bit简写为小写字母“b”,字节Byte简写为大写字母“B” 8*b=1*B 1024*B=1*KB 1024*K=1MB 2.举例 一个英文字 ...
- 一个字 word 是16位, 一个字由两个字节组成 , 字节=byte ,一个字节8位, 位=bit 如果没有特殊说明kb 就是指 k*bit
一个字 word 是16位, 一个字由两个字节组成 , 字节=byte,,一个字节8位, 位=bit 如果没有特殊说明kb 就是指 k*bit kbyte= k*byte
- Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式
解析:Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式.面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和Out ...
- 位(bit)、字节(Byte)、字(Word)、双字(Dword)之间的关系
位(bit): bit(简写:b),是计算机数据存储最小的单位,二进制中,0或者1就是一个位(比特位)bit. 字节: Byte(简写:B),是计算机信息技术用于计量存储容量的一种计量单位,通常情况下 ...
- 最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类
前言:用于处理Java基本数据的转换及进制转换操作工具 一.实现功能 1.int与byte互转 2.int与byte[]互转 3.short与byte互转 4.short与byte[]互转 5.16位 ...
随机推荐
- 针对windows系统如何解决openssl_pkey_export(): cannot get key from parameter 1这个问题
为了解决这个问题我百度了很多方法,可是很多方法并没有效果. 方法一: 如果你安装的是phpstudy这个集成环境,那么 1.你就要去php拓展里面去打开php_opemssl中打开这个扩展. 2.去p ...
- [20191127]探究等待事件的本源4.txt
[20191127]探究等待事件的本源4.txt --//昨天使用ash_wait_chains.sql脚本把各个生产库执行1遍,才发现我对一套系统性能理解错误.--//我一直以为这套系统存储有点问题 ...
- 【转】#define 定义别名和 typedef 声明类型的区别
下面一段程序的执行结果是: #include <stdio.h>#define CHAR2 char*int main(){ typedef char* CHAR; CHAR ...
- 数据治理的王者——Apache Atlas
一.Atlas是什么? 在当今大数据的应用越来越广泛的情况下,数据治理一直是企业面临的巨大问题. 大部分公司只是单纯的对数据进行了处理,而数据的血缘,分类等等却很难实现,市场上也急需要一个专注于数据治 ...
- [PHP] Workerman中的注册树模式
注册树模式是把对象挂到一个类的属性数组里,下次直接在这个数组里面取,保持全局唯一,一般在项目入口初始化的时候有用到.在workerman中一开始的就是个注册树模式的运用,下面是对他的模拟 <?p ...
- pycharm报错:Process finished with exit code -1073741819 (0xC0000005)解决办法
这个是几个月前的问题了,有小伙伴在CSDN问我咋解决的,那我今天在这边把这个问题解决办法分享下吧,免得大家把很多时间都浪费在安装排坑上面,有些坑虽然解决了还真不知道啥原因. 我的pycharm一直用的 ...
- C++ std::list 基本用法
#include <iostream> #include <string> #include <list> using namespace std; // http ...
- 原子类解决i++问题
原子类解决i++问题 import java.util.concurrent.atomic.AtomicInteger; /** * 一个完整的i++,多线程并发安全问题演示.及使用java.util ...
- laravel5+ElasticSearch+go-mysql-elasticsearch MySQL数据实时导入(mac)
1. ElasticSearch安装 直接使用brew install elasticsearch 安装最新版本的es,基本没有障碍. 2.Laravel5 框架添加elasticsearch支持 在 ...
- 基于V7的emWin多屏显示方案模板,同时驱动LCD和OLED例程
说明: 1.多屏驱动跟多图层驱动是类似的,可以使用函数GUI_SelectLayer做切换选择. 2.为了避免OLED闪烁问题,创建一个128*64bit的显存空间,然后使用emWin的GUI_TIM ...