Golang 字符串与字节数组互转的实现

目录
  • 一、字符串与字节数组?
  • 二、详细代码
    • 1.字节转字符串
    • 2.字符串转字节数组
    • 3.完整运行测试
  • 总结

一、字符串与字节数组?

字符串是 Go 语言中最常用的基础数据类型之一,本质上是只读的字符型数组,虽然字符串往往都被看做是一个整体,但是实际上字符串是一片连续的内存空间。

Go 语言中另外一个类型字节(Byte)。在ASCII中,一个英文字母占一个字节的空间,一个中文汉字占两个字节的空间。英文标点占一个字节,中文标点占两个字节。一个Byte数组中的元素对应一个ASCII码。

二、详细代码

1.字节转字符串

代码如下(示例):

func BytesToString(data []byte) string {
    return *(*string)(unsafe.Pointer(&data))
}

2.字符串转字节数组

代码如下(示例):

func StringToBytes(data string) []byte {
    return *(*[]byte)(unsafe.Pointer(&data))
}

3.完整运行测试

代码如下(示例):

func BytesToString(data []byte) string {
    return *(*string)(unsafe.Pointer(&data))
}

func StringToBytes(data string) []byte {
    return *(*[]byte)(unsafe.Pointer(&data))
}

func main() {
    str := "hello world!"

    fmt.Println(str)

    a := StringToBytes(str)

    fmt.Println(a)

    b := BytesToString(a)

    fmt.Println(b)
}

结果(示例):

成功转译出Hello world!

总结

两个方法来记住字节数组与字符串互转,简单直接,实用性拉满。

在byte数组转字符串时,需要去掉数组中ASII为0的字符,数组的大小是固定的,字符串本身的长度可能小于数组的长度,如果直接转换成字符串就会出现问题。使用byte切片时候正常的原因是切片的长度会自动和字符串的长度一致,string会区切片长度个数的字符。而数组在初始化时会有默认值,且数组的长度和容量一样,转换成字符串的时候可能会多出一部分字符,从而导致出错。

到此这篇关于Golang 字符串与字节数组互转的实现的文章就介绍到这了,更多相关Golang 字符串与字节数组互转内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 简单谈谈Golang中的字符串与字节数组

    前言 字符串是 Go 语言中最常用的基础数据类型之一,虽然字符串往往都被看做是一个整体,但是实际上字符串是一片连续的内存空间,我们也可以将它理解成一个由字符组成的数组,Go 语言中另外一个与字符串关系非常密切的类型就是字节(Byte)了,相信各位读者也都非常了解,这里也就不展开介绍. 我们在这一节中就会详细介绍这两种基本类型的实现原理以及它们的转换关系,但是这里还是会将介绍的重点主要放在字符串上,因为这是我们接触最多的一种基本类型并且后者就是一个简单的 uint8 类型,所以会给予 string

  • Golang 字符串与字节数组互转的实现

    目录 一.字符串与字节数组? 二.详细代码 1.字节转字符串 2.字符串转字节数组 3.完整运行测试 总结 一.字符串与字节数组? 字符串是 Go 语言中最常用的基础数据类型之一,本质上是只读的字符型数组,虽然字符串往往都被看做是一个整体,但是实际上字符串是一片连续的内存空间. Go 语言中另外一个类型字节(Byte).在ASCII中,一个英文字母占一个字节的空间,一个中文汉字占两个字节的空间.英文标点占一个字节,中文标点占两个字节.一个Byte数组中的元素对应一个ASCII码. 二.详细代码

  • C# 16进制与字符串、字节数组之间的转换

    复制代码 代码如下: /// <summary> /// 字符串转16进制字节数组 /// </summary> /// <param name="hexString"></param> /// <returns></returns> private static byte[] strToToHexByte(string hexString) { hexString = hexString.Replace(&quo

  • JAVA对象和字节数组互转操作

    0x01 创建要转换的类和主函数 注意这里一定要实现序列化 package day1; import java.io.Serializable; public class Test360 implements Serializable { @Override public String toString() { return "Test360{" + "name='" + name + '\'' + '}'; } String name="test&quo

  • C#中字符串与字节数组的转换方式

    一.编码(转成字节数组)GetBytes 1.ASII码:字符串中的每个字符用一个字节表示. 每个字符实际上只使用了7位,从00h-7Fh.只能表达128个字符.不能代表汉字, byte[] b = Encoding.ASCII.GetBytes("yourstring"); Console.Write(string.Join("-", b.Select(p => p.ToString()))); //  得到:121-111-117-114-115-116-

  • Golang中字符串(string)与字节数组([]byte)一行代码互转实例

    目录 一.字符串与字节数组? 二.详细代码 1.简单的方式字节转字符串 2.简单的字符串转字节数组 3.字节转字符串 4.字符串转字节数组 5.完整运行测试 补充:一些结论如下 总结 一.字符串与字节数组? 字符串是 Go 语言中最常用的基础数据类型之一,本质上是只读的字符型数组,虽然字符串往往都被看做是一个整体,但是实际上字符串是一片连续的内存空间. Go 语言中另外一个类型字节(Byte).在ASCII中,一个英文字母占一个字节的空间,一个中文汉字占两个字节的空间.英文标点占一个字节,中文标

  • golang字符串本质与原理详解

    目录 一.字符串的本质 1.字符串的定义 2.字符串的长度 3.字符与符文 二.字符串的原理 1.字符串的解析 2.字符串的拼接 3.字符串的转换 总结 一.字符串的本质 1.字符串的定义 golang中的字符(character)串指的是所有8比特位字节字符串的集合,通常(非必须)是UTF-8 编码的文本. 字符串可以为空,但不能是nil. 字符串在编译时即确定了长度,值是不可变的. // go/src/builtin/builtin.go // string is the set of al

  • c# 获取字符串的字节数的方法

    将字符串转换为ASCII编码数组,只要是中文字节码就是ASCII编码63即"?",所以可以由此来进行判断 复制代码 代码如下: class StringOP    {        /// <summary>        /// 获取中英文混排字符串的实际长度(字节数)        /// </summary>        /// <param name="str">要获取长度的字符串</param>      

  • python字符串str和字节数组相互转化方法

    实例如下: # bytes object b = b"example" # str object s = "example" # str to bytes bytes(s, encoding = "utf8") # bytes to str str(b, encoding = "utf-8") # an alternative method # str to bytes str.encode(s) # bytes to str

  • Java 字节数组类型(byte[])与int类型互转方法

    代码如下: public class CommonUtils { //高位在前,低位在后 public static byte[] int2bytes(int num){ byte[] result = new byte[4]; result[0] = (byte)((num >>> 24) & 0xff);//说明一 result[1] = (byte)((num >>> 16)& 0xff ); result[2] = (byte)((num >

随机推荐