gpt4 book ai didi

go - 从文件中读取字符串、整数和字节

转载 作者:IT王子 更新时间:2023-10-29 01:44:47 27 4
gpt4 key购买 nike

我必须使用 Go 读取数据已加密(元数据未加密)的 PPM 文件,文件格式提供给我包含:

  • “P3”魔数(Magic Number)(读作字符串)

  • 图像宽度(读作整数)

  • 图像高度(读作整数)

  • 最大颜色值(读作整数)

然后,我需要读取文件的其余部分是加密位,我必须将其作为单个字节数组/slice 读取。

例如:

P6
480 360
255
�š��GHFHFI�GHFHFG~EG~EG~E
...
HFD{BR�Rz�y|�vxyyhlf%8&NFzx

从文件中以字节形式读取字符串和整数(4 个初始元数据值)以及其余部分(加密部分)的好方法是什么?它可以是最有效的,但首选最干净(更少的行)。

最佳答案

您可以使用 bufio.Reader使用 ReadLine 读取前 3 行或 ReadString方法并使用 Read 读取文件的其余部分方法。

阅读前 3 行后,您可以使用 strings包拆分第二行,然后是strconv将包含数字的字符串解析为整数的包。

例如:

r := bufio.NewReader(file)
line1, err := r.ReadString('\n')
if err != nil {
panic(err)
}
// repeat to read line 2 and 3

size := strings.Split(line2, " ")
width, err := strconv.Atoi(size[0])
if err != nil {
panic(err)
}
height, err := strconv.Atoi(size[1])
if err != nil {
panic(err)
}
// repeat with line 3

更新:

Adrian 的评论中所述你可以使用 bufio.Scanner连同 bufio.ScanWord SplitFunc 扫描元数据。

s := bufio.NewScanner(r)
s.Split(bufio.ScanWords)

var count int
for s.Scan() && count < 4 {
switch count {
case 0:
magic = s.Text()
case 1:
if width, err = strconv.Atoi(s.Text()); err != nil {
return
}
case 2:
if height, err = strconv.Atoi(s.Text()); err != nil {
return
}
case 3:
if color, err = strconv.Atoi(s.Text()); err != nil {
return
}
}
count++
}

https://play.golang.org/p/-rOJb_WlFf

关于go - 从文件中读取字符串、整数和字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43784825/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com