Go 中 int 到 string 的转换是如何工作的?

2024-04-11

我今天才开始使用 Go,所以这可能是显而易见的,但我找不到任何内容。

什么是var x uint64 = 0x12345678; y := string(x) give y?

I know var x uint8 = 65; y := string(x)会给y字节 65,字符A,常识会建议(因为类型大于uint8允许转换为字符串),它们将简单地打包为本机字节顺序(即小端)并分配给变量。

事实似乎并非如此:

hex.EncodeToString([]byte(y)) ==> "efbfbd"

第一个想法是,这是一个地址,由于一些奇怪的空终止符,最后一个字节被遗漏了,但是如果我分配两个x and y具有两个不同值的变量并将它们打印出来我得到相同的结果。

var x, x2 uint64 = 0x10000000, 0x20000000
y, y2 := string(x), string(x2)
fmt.Println(hex.EncodeToString([]byte(y))) // "efbfbd"
fmt.Println(hex.EncodeToString([]byte(y2))) // "efbfbd"

令人抓狂的是,尽管我可能还不够努力,但我在任何地方都找不到字符串类型的实现。


这包含在规范:转换:与字符串类型之间的转换: https://golang.org/ref/spec#Conversions

将有符号或无符号整数值转换为字符串类型会生成一个包含该整数的 UTF-8 表示形式的字符串。有效 Unicode 代码点范围之外的值将转换为"\uFFFD".

当您将数值转换为时非常有效string,它只能产生一个string有一个rune(特点)。自从 Go 商店strings作为内存中的 UTF-8 编码字节序列,这就是如果您将您的string to []byte:

将字符串类型的值转换为字节类型的切片会生成一个切片,其连续元素是字符串的字节。

当您尝试转换0x12345678, 0x10000000 and 0x20000000价值观string,因为它们超出了有效 Unicode 代码点的范围,根据规范它们被转换为"\uFFFD"在 UTF-8 编码中是[]byte{239, 191, 189};当编码为十六进制字符串时:

fmt.Println(hex.EncodeToString([]byte("\uFFFD"))) // Output: efbfbd

或者简单地:

fmt.Printf("%x", "\uFFFD") // Output: efbfbd

阅读博客文章Go 中的字符串、字节、符文和字符 https://blog.golang.org/strings有关更多详细信息string内部结构。

顺便说一句,从 Go 1.5 开始,Go 运行时(大部分)是在 Go 中实现的,因此这些转换现在是在 Go 中实现的,可以在runtime https://golang.org/pkg/runtime/包裹:runtime/string.go https://golang.org/src/runtime/string.go,寻找intstring()功能。

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

Go 中 int 到 string 的转换是如何工作的? 的相关文章

  • 如何逐行解析文本区域中的用户输入

    如果我有一个包含文本信息的变量 比如从文本区域获取 如何逐行读取字符串变量中保存的文本内容 在文本区域中输入的文本将以 n 输入键 来分隔行 您可以使用StringReader http msdn microsoft com en us l
  • 在 IntelliJ IDEA 中运行。多个文件和错误未定义:数据

    我想使用 IntelliJ IDE 社区版编写代码GO Go语言 我安装了正确的插件 并安装了构建应用程序所需的所有工具 我的应用程序包含以下两个文件 每个都在目录中 事件服务器 Main go Data go 如果我想使用 Run Ctl
  • 如何在 Rust 中从文字创建格式化字符串?

    我将根据给定的参数返回一个字符串 fn hello world name Option
  • 2 批字符串问题

    1 是否有任何内置函数可以告诉我变量的内容是否仅包含大写字母 2 有没有办法查看变量是否包含字符串 例如 我想查看变量 PATH 是否包含 Ruby 对于第 1 部分 findstr就是答案 您只需使用正则表达式功能即可errorlevel
  • 完全删除使用“go get”安装的软件包?

    我正在使用 Go 1 13 1 最新版本 我正在尝试完全删除我安装的软件包go get来自 GitHub 这go clean i
  • 在处理程序之后访问 HTTP 请求上下文

    在我的日志记录中间件 链中的第一个 中 我需要访问一些在链下游的某些身份验证中间件中编写的上下文 并且仅在处理程序本身执行之后 旁注 需要首先调用日志记录中间件 因为我需要记录请求的持续时间 包括在中间件中花费的时间 此外 当权限不足时 身
  • 查找文本文件中的唯一单词

    我正在用 Java 编写这个程序来查找文本文件中的唯一单词 我想知道这段代码是否正确 因为它甚至将空格显示为单词 String words List
  • 如何从非英语字符串解析go中的月份

    我想将以下字符串解析为 go 中的日期 This item will be released on March 9 2014 我跟着this https stackoverflow com questions 14106541 go par
  • 为什么replaceAll在这行代码中不起作用? [复制]

    这个问题在这里已经有答案了 String weatherLocation weatherLoc 1 toString weatherLocation replaceAll how weatherLocation replaceAll wea
  • 使用 OpenTelemetry 统一不同服务的范围

    我刚刚开始使用 OpenTelemetry 并为此创建了两个 微 服务 Standard and GeoMap 最终用户将请求发送到Standard服务 该服务又将请求发送到GeoMap在将结果返回给最终用户之前获取信息 我使用 gRPC
  • 是否有用于 C 字符串的标准 C++ 迭代器?

    有时我需要使用通用 C 迭代器范围接口将 C 字符串传递给函数 first last 是否有针对这些情况的标准 C 迭代器类 或者无需复制字符串或调用的标准方法strlen 编辑 我知道我可以使用指针作为迭代器 但我必须知道字符串在哪里结束
  • 在字符串中间添加一个字符

    可能有一个简单的解决方案可以解决这个问题 但会引起面部表情 我将时间存储为 4 个字符长的字符串 即 1300 我试图将该字符串显示为 13 00 我觉得必须有一个比我现在正在做的更优雅的解决方案 我目前有 startTime get fi
  • 在 HTML5 Javascript 中将 BlobBuilder 转换为字符串

    function blobToString blob var reader new FileReader var d reader onloadend function d callback reader result console lo
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • TypeScript 中泛型的不安全隐式转换

    TypeScript 编译器tsc编译以下代码 即使使用 strict旗帜 然而 该代码包含一个基本错误 而在 Java 或 C 等语言中可以避免这种错误 interface IBox
  • Golang中如何获得100%的代码覆盖率? [复制]

    这个问题在这里已经有答案了 我无法获得 100 的代码覆盖率 因为我无法在 Golang 中测试 Fatals 我发现了一些问答 包括this one https stackoverflow com questions 30688554 h
  • Android:比 android:ellipsize="end" 更好的东西可以将“...”添加到截断的长字符串中?

    这个性质 https stackoverflow com questions 1666736 android textview automatically truncate and replace last 3 char of string
  • 将一串数据标记为结构向量?

    因此 我有以下数据字符串 该数据是通过 TCP winsock 连接接收的 并且想要进行高级标记化 将其转换为结构向量 其中每个结构代表一条记录 std string buf 44 william adama commander stuff

随机推荐