gpt4 book ai didi

go - 遍历所有可能的字节

转载 作者:IT王子 更新时间:2023-10-29 02:24:52 26 4
gpt4 key购买 nike

所以我正在尝试针对所有可能的字节 测试函数,即0255 的可能性。如何遍历所有可能的字节?我有

我试过了

 for i := 0; i < 256; i++ {
fmt.Println(byte(i)) // prints a number 0-255
fmt.Println(byte{i}) // crashes
}

最佳答案

循环 uint8(又名“字节”)值的一个棘手部分是将 1 加到 255 会使您回到零。如果您的 for 循环条件是 i <= 255,很容易意外形成无限循环。 .如果目标是遍历每个可能的字节 [0-255],而不引入更大类型的索引器,您可以做到,但必须小心。

go 中的 for 循环具有三个可选部分。它是手动指定初始化、中断条件和增量/减量的模板或简写。 (我松散地使用这些名称 b/c 你可以执行任何你想要的语句/表达式,或者根本不执行)

我将编写一些永远循环的损坏代码,然后以更明确的方式重写它:

原始损坏:

for i := byte(0); i <= 255; i++ {
fmt.Println(i)
}

类似于这个明显损坏的版本:

i := byte(0)

for ; ; {
if i <= 255{
fmt.Println(i)
i++
} else {
break
}
}

再看第二个例子,我们更容易看出问题所在。我们想在 i==255 时跳出循环, 但只有在运行 fmt.Println(i) 之后-- 我们绝对不想i == 255 时递增. for 循环检查条件和递增的顺序没有什么神圣的——如果默认顺序不适合我们的情况,请以有效的顺序显式重写代码。在我们的例子中,我们主要关心何时跳出循环:

一个正常运行的例子:

i := byte(0)

for ; ; {
fmt.Println(i)
if i == 255{
break
} else {
i++
}
}

一个更简洁的功能示例:

for i := byte(0); ;i++ {
fmt.Println(i)
if i == 255{
break
}
}

当我们在这里时,我会指出 for 循环是围绕条件跳转语句的抽象,或者换句话说 -- gotos。在这种情况下,我认为了解它如何与显式跳转/转到一起工作可能有一些指导值(value):

i := byte(0)

printI:
fmt.Println(i)

if i < 255 {
i++
goto printI
}

关于go - 遍历所有可能的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41031438/

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