为什么 Go 中无法将 [Size]byte 转换为字符串?

2024-04-28

我有一个大小字节数组,是我做完之后得到的md5.Sum().

data := []byte("testing")
var pass string 
var b [16]byte
b = md5.Sum(data)
pass = string(b)

错误:

cannot convert b (type [16]byte) to type string

我在这里找到解决方案problem https://stackoverflow.com/questions/26072921/how-do-i-convert-sizebyte-to-string-in-go/28039572?noredirect=1#comment44464957_28039572

改成:

pass = string(b[:])

但为什么不能这样使用呢?

pass = string(b)

简短的回答是因为 Go 语言规范不允许这样做。

引用自Go 语言规范:转换 http://golang.org/ref/spec#Conversions:

非常数值x可以转换为类型T在任何这些情况下:

  • x可分配给T.
  • x的类型和T具有相同的基础类型。
  • x的类型和T是未命名的指针类型,并且它们的指针基类型具有相同的基础类型。
  • x 的类型和T都是整数或浮点类型。
  • x 的类型和T都是复杂类型。
  • x是一个整数或字节或符文的切片并且T是字符串类型。
  • x是一个字符串并且T是字节或符文的切片。

该规范仅允许将字节或符文片段转换为string,但不是字节数组。

长答案

在 Go 中,数组和切片是不同的类型。数组的大小是类型的一部分。

切片比数组更通用,将数组转换为表示同一系列值的切片非常容易:arr[:](而且也很便宜,结果切片将共享数组作为其后备数组,不会进行重新分配或复制)。

因此,所有功能和支持都是为切片而不是数组提供的。

只是图像你想要创建一个简单的函数,它需要一个切片(任意长度)int数字并返回数字之和。像这样的东西:

func sum(s []int) (sum int) {
    for _, v := range s {
        sum += v
    }
    return
}

如果您决定使用数组作为输入,由于长度是类型的一部分,您将限制函数的可用性,它只能采用相同长度的数组:

func sum2(s [2]int) (sum int) {
    for _, v := range s {
        sum += v
    }
    return
}

您可以致电sum2()仅适用于类型的值[2]int但如果你有一个类型数组[3]int, you can't因为这两种类型是不同的!你也不能打电话sum2()如果你只有一片int的(您无法访问切片的支持数组)。同时您可以致电您的sum()与所有功能[]int切片,如果你有一个数组,你仍然可以通过传递来使用它arr[:]给你的sum()功能。

Note:

另请注意,将“随机”字节片转换为string很可能不是您想要的,因为“随机”字节片可能不是有效的 UTF-8 字节序列。

相反,使用encoding/hex http://golang.org/pkg/encoding/hex/包将结果转换为十六进制字符串,如下所示:

fmt.Println(hex.EncodeToString(b[:]))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Go 中无法将 [Size]byte 转换为字符串? 的相关文章

  • 为关联数组选择哪种映射类型?学说ODM

    我有一个关于 顺便说一句 真的很棒 Doctrine ODM 的简单问题 假设您有一个类似以下的文档 Document class Test Id public id WHICHTYPE public field array 现在我想存储一
  • Lua表在内存中是如何处理的?

    lua如何处理表的增长 是否相当于ArrayList在Java中 IE 需要连续的内存空间 并且当它变得大于已经分配的空间时 内部数组被复制到另一个内存空间 有什么聪明的方法来引导吗 我的问题是 表是如何存储在内存中的 我不是问如何在 Lu
  • 如何将字节数组转换为图像 [kotlin]

    我想将字节数组转换为图像并在图像视图中显示它 但不知道该怎么做 有人可以指导我吗 我使用这个函数将位图转换为字节数组 private fun BitmapToByteArray ByteArray val stream ByteArrayO
  • 执行数组内的函数

    是否可以从数组内部执行匿名函数 也在数组内部定义 return execute function logic 或者我应该在外面定义它然后再调用它 从技术上讲 您可以将该函数括在括号中并像这样调用它 return function retur
  • 在php中对带有特殊字符的多维数组进行排序

    我有一个多维数组 我按字母顺序排序 但问题是 带有丹麦语特殊字符 它们应该按该顺序排序 但不会按该顺序返回 这是我的数组 部分已删除 Array 0 gt Array Name gt John 1 gt Array Name gt Pate
  • 如何在 JavaScript 中构建一个计算数组中出现次数的对象?

    我想计算数组中某个数字出现的频率 例如 在Python中我可以使用Collections Counter创建一个字典 记录某个项目在列表中出现的频率 据我所知 JavaScript 是这样的 var array 1 4 4 5 5 7 va
  • 根据 R 中的字符串模式选择行

    假设我有以下数据 df lt data frame name c TO for Turnover for people HC people Hello world beenie man apple pears TO is number c
  • C++:字符串流有什么好处?

    谁能告诉我一些在 C 中使用字符串流的实际例子 即使用流插入和流提取运算符输入和输出到字符串流 您可以使用字符串流来转换任何实现operator lt lt 到一个字符串 include
  • Python 中的可变字符串

    你知道有一个提供可变字符串的 Python 库吗 谷歌返回的结果出奇的少 我发现的唯一可用的库是http code google com p gapbuffer http code google com p gapbuffer 它是用 C
  • “未捕获的类型错误:Array.removeAt() 不是函数”,

    I got a Array removeAt 的 MSDN 文档 https msdn microsoft com en us library bb383998 aspx功能 但是当我尝试时 我收到此错误 未捕获的类型错误 Array re
  • 默认数组值

    有没有办法在javascript中为数组分配默认值 ex an array with 24 slots that defaults to 0 您可以使用fill数组上的函数 Array 24 fill 0 Note fill仅在 ECMAS
  • 过滤数组以获取唯一字段值

    我知道有很多方法可以过滤数组中的唯一值 但是如何过滤数组中具有给定字段的唯一值的对象呢 例如我有 obj1 obj2 obj3 其中每个对象具有以下形式 firstName lastName 如何过滤数组以最终得到一个最终数组 其中所有对象
  • 在 postgresql 9.4 或 9.5 中查询 json 对象的嵌套数组中的元素

    studentID 1 StudentName jhon Data schoolname school1 enrolmentInfo year 2015 info courseID csc213 school IT enrollmentda
  • 如何打印整个字符串池?

    我想打印包含文字的整个字符串池String使用添加的对象intern 就在垃圾收集之前 JDK有没有隐式的方法来进行这样的操作 我们如何检查字符串池 EDIT The comment suggests that there may be a
  • C++11 内部 std::string 表示形式 (libstdc++)

    std string 在 c 11 libstdc 中如何内部表示 在深入研究实现时 我发现 A string looks like this Rep M length basic string
  • 如何按值删除数组中的多个项目?

    我正在尝试做一个removeAll 函数 它将删除具有该特定值 而不是索引 的数组的所有元素 当我们对循环进行任何更改时 棘手的部分就出现了 索引往往会移动 使其很难像我们想要的那样工作 并且每次更改时都重新启动循环 这在大数组上效率非常低
  • SWI Prolog 转义引号

    我需要在序言中将 放在字符串周围 我从另一个程序获取输入 看起来我无法转义该程序中的 因此我必须在序言中添加 否则序言语句将不起作用 感谢您的帮助 为了讨论strings https stackoverflow com a 39922411
  • 与 array_intersect 相反?

    是否有一个内置函数可以获取数组 1 中不存在于数组 2 中的所有成员 我知道如何以编程方式执行此操作 只是想知道是否有一个内置函数可以执行相同的操作 所以请不要提供代码示例 这听起来像是一份工作array diff http www php
  • 在 Javascript 中创建数组

    我对 javascript 不太熟悉 并且在用 javascript 制作 2d 或者也许我可能需要 3d 数组时遇到了一些麻烦 我目前需要收集 2 条信息 一个 ID 和一个值 因此我创建了以下内容 var myArray var id
  • 将一维数组转换为二维数组[重复]

    这个问题在这里已经有答案了 我正在开发一个程序 我必须将文本文件中的值读入一维数组 我已经成功获取该一维数组中的数字 m1 1 2 3 4 5 6 7 8 9 但我希望数组是 m1 1 2 3 4 5 6 7 8 9 您可以使用此代码 co

随机推荐