Golang中int64的Reg 0切片操作详解

Golang中int64的Reg 0切片操作详解 大家好,

我正在尝试通过以下代码打印 02。

n:= int64(02)
fmt.Println(n)

但我只得到 2。它总是截断 0。如何打印 02 而不是 2?

20 回复

好的,谢谢。

更多关于Golang中int64的Reg 0切片操作详解的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


02 应该对应哪个十进制整数?是 2 吗?

是的,我已经尝试过这个方法,它确实有效。谢谢

使用 Sprintf 方法如下:

var str = fmt.Sprintf("%02d", 2)

这里 n 返回 71,2,25,22 但我想要 71,02,25,22

那么请展示您将文本输出

71,02,25,22

转换为四个整数的Go代码。

所以你是想解析文本输出吗?02 是来自 Wireshark 的文本输出吗?

嗯,看看你前几天提出的其他问题,我们曾试图解答,但现在我不太确定了。我们都在这里提供帮助,但你也需要协助我们,让我们能够更好地帮助你。

pkt[i] 包含头部值。我需要前4个数据包值,因此我迭代了前四个数据包值,这将返回以下输出: 71 2 25 22

谢谢

data = hexvalue
for i = 0; i < 4; i++ {

	n = int64(pkt[i])
	fmt.Println(n)
	hexvalue = strconv.FormatInt(n, 16)
	data += hexvalue

}

fmt.Println("HexValue-", data)

我正在处理获取视频头信息。在Wireshark中我得到以下输出:71,02,25,22

但在Go程序中,迭代数据包详细信息时我得到以下输出:

71,2,25,22

由于这个原因,二进制值正在发生变化。

谢谢

pkt 是什么?

请不要这样提问。请提出一个能够被回答的问题。提供所有必要的信息,以便理解您的问题和您尝试的解决方案。请参考:

不。请去了解如何提出一个好的问题。然后改进你的问题。问问自己:如果你除了问题中包含的信息外一无所知,你能理解它吗?如果不能,请重新修改你的问题。只有当你能够肯定地回答时,再来这里发布你的问题。并且看一下这里提供的工具,以便以可读的方式发布代码。

Raja_Pandian:

hexvalue = strconv.FormatInt(n, 16)

嗯,当我看到这个时,我不认为你真正想要的是建议的 fmt.Sprintf… 当 n 是十进制 10 时,你希望看到什么?是十六进制的 0a 还是十进制的 10

hexvalue = strconv.FormatInt(n, 16)

如果你想用前导零打印整数,可以使用类似 fmt 包的功能来实现 - https://play.golang.org/p/GwjGeT9g9GT

func main() {
    fmt.Printf("02 = %02d\n", 2)
    fmt.Printf("2 = %d\n", 2)
}

如果你希望代码能够区分解析到的是 “02” 还是 “2”,这是个完全不同的问题,具体实现会更依赖于你的代码逻辑。

好文章,没有冒犯之意。

请让我们继续维护和建设一个由Gopher、程序员、计算机科学家等组成的优秀社区。

当我在90年代开始编程时,并没有所谓的社区,至少没有今天这个词所代表的含义。那时没有谷歌,没有Stack Overflow,没有即时满足。有的是Usenet和邮件列表。当然,还有无休止的论战。但也有忽略文件。

我们这些还记得那些旧日时光的人可能心情复杂。有些事情很棒,有些则很糟糕。但我们应对了。我们继续前进,也许是因为我们努力工作,也许是因为我们有天赋,也许仅仅是因为我们被深深吸引。但我们继续前进并不是因为作为全球社区的一部分而获得了温暖模糊的感觉。

如今,编程领域的大多数主要参与者及其附属社区强调多样性、包容性、友善和创造安全空间,这令人困惑。我们都知道谷歌建立社区并不是因为他们是什么"好人"。谷歌和所有其他大公司都想赚钱。强调社区,将其与美国中心化的社交互动观点混为一谈,而我们都知道,如果有其他赚钱方式,他们会立刻抛弃这一切,这是虚伪的。

在Go语言中,int64类型存储的是整数值,而不是数字的字符串表示形式。当你使用fmt.Println(n)打印int64变量时,它会输出该整数的数值,前导零会被忽略。要保留前导零,你需要将整数格式化为字符串,指定最小宽度并在左侧填充零。

以下是修改后的代码示例:

package main

import "fmt"

func main() {
    n := int64(02)
    // 使用fmt.Printf格式化输出,宽度为2,左侧补零
    fmt.Printf("%02d\n", n)
}

输出:

02

解释:

  • %02d 是格式化动词:
    • %d 表示将整数格式化为十进制数。
    • 02 指定最小宽度为2,如果数字位数不足,则在左侧用零填充。

如果你需要将格式化的结果存储为字符串,可以使用fmt.Sprintf

package main

import "fmt"

func main() {
    n := int64(02)
    s := fmt.Sprintf("%02d", n)
    fmt.Println(s) // 输出: 02
}

这样就能正确保留前导零并输出"02"。

回到顶部