string rune byte 的关系

在Go当中 string底层是用byte数组存的,并且是不可以改变的。

例如 s:="Go编程" fmt.Println(len(s)) 输出结果应该是8因为中文字符是用3个字节存的。

len(string(rune(‘编‘)))的结果是3

如果想要获得我们想要的情况的话,需要先转换为rune切片再使用内置的len函数

fmt.Println(len([]rune(s)))

结果就是4了。

所以用string存储unicode的话,如果有中文,按下标是访问不到的,因为你只能得到一个byte。 要想访问中文的话,还是要用rune切片,这样就能按下表访问。

时间: 2024-10-26 01:13:09

string rune byte 的关系的相关文章

转:Java中String与byte[]的转换

fuzhaoyang 转:Java中String与byte[]的转换 原文地址:http://blog.csdn.net/llwan/article/details/7567906 String s = "fs123fdsa";//String变量 byte b[] = s.getBytes();//String转换为byte[] String t = new String(b);//bytep[]转换为String 做JAVA经常会碰到中文乱码问题,还有各种编码的问题,特别是Stri

如何在String和Byte[]对象之间进行转换

分析问题 字符串和字节数组之间的转换,事实上代表了现实世界信息和数字世界信息之间的转换,要理解其中的机制,需要先了解一下几个概念. 1.比特. 比特(bit)是指一个位,它可以说是计算机内物理保存的最近本单元.现在的计算机体系采用二进制逻辑,即一个基本单元可以保存两种数值:0和1.这是因为0.1机制可以用多种物理系统来表示,例如高电平和低电平.二极管的导通和关闭.磁场的正极和负极等.总之,一个比特就是一个二进制位. 2.字节. 一个字节(byte),在C#中是由8个比特来构成的.它的值可以有一个

全面解释java中StringBuilder、StringBuffer、String类之间的关系

http://www.jb51.net/article/33398.htm String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间,StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象,StringBuffer和StringBuilder类功能基本相似 1. String 类  String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不

转 string和byte[]的转换 (C#)

转 string和byte[]的转换 (C#) string类型转成byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str );反过来,byte[]转成string: string str = System.Text.Encoding.Default.GetString ( byteArray ); 其它编码方式的,如System.Text.UTF8Encoding,System.Text.UnicodeEnc

android中webview loadUrl(String url,Map header)方法和postUrl(String url,byte[] postData)方法同时使用问题;

首先说明 loadUrl(String url,Map header)是用于加载webview中添加请求头的方法 postUrl(String url,byte[] postData)是用于加载webview中添加请求体的方法 但是比较坑的是如果你想同时添加请求头和请求体这两个方法都不能用,并且android自带的webview中也没有提供方法 在stackoverflow上搜索后有用其他第三方封装的http请求做的,但是比较麻烦,在这里说出我自己的处理方法,不一定适合所有人, 但是绝对简单粗暴

1PB=1024TB —— EB和GB的关系,就好像TB和Byte的关系

1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB 1PB=1024TB 1EB=1024PB 1ZB=1024EB 1YB=1024ZB 1BB=1024YB 1EB=1099511627776 GB, EB和GB的关系,就好像TB和Byte的关系. 换句话说,如果一个硬盘容量是500GB的话,那么,要装载一个1EB的文件,需要用掉22亿个这样的硬盘...

C#中使用Buffer.BlockCopy()方法将string转换为byte array的方法:

public static void BlockCopy(Array src, int srcOffset, Array dst, int dstOffset, int count); 将指定数目的字节从起始于特定偏移量的源数组复制到起始于特定偏移量的目标数组. /// <summary> /// C#中使用Buffer.BlockCopy()方法将string转换为byte array的方法 /// </summary> /// <param name="str&

关于new String(new byte[]{0})

今天在做Zxing的二维码的时候,返回的数据竟然是这个样子,郁闷了一小会,说明我用的这个控件有改进的空间.由于时间的原因,最后还是把这个返回的字符串重新组装. 1 Bundle bundle = data.getExtras(); 2 byte[] btyeAry = bundle.getString("result").getBytes(); 3 StringBuffer buffer = new StringBuffer(); 4 if(btyeAry != null &&

无需考虑编码问题string转byte的方法

static byte[] GetBytes(string str) { byte[] bytes = new byte[str.Length * sizeof(char)]; System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); return bytes; } static string GetString(byte[] bytes) { char[] chars = new char[bytes.Leng