所以我试图针对每个可能的字节测试一个函数,即document.getElementById("test").innerHTML
到0
种可能性。如何迭代所有可能的字节?我已经
我试过
255
答案 0 :(得分:1)
关于循环遍历uint8(又称“字节”)值的棘手部分是,将1加到255会使您回到零。如果您的for循环条件为i <= 255
,很容易意外地形成无限循环。如果目标是遍历每个可能的字节[0-255],而不引入较大类型的索引器,则可以这样做,但必须小心。
go中的for循环具有三个可选部分。它是手动指定初始化,中断条件和增量/减量的模板或简写。 (我宽松地使用了这些名称,因为您可以执行所需的任何类型的语句/表达式,或者根本不执行任何语句)
我要写一些永远循环的坏代码,然后以更明确的方式重写它:
原始破损:
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。在这种情况下,我认为在使用显式跳转/跳转时如何工作将具有一定的指导意义:
i := byte(0)
printI:
fmt.Println(i)
if i < 255 {
i++
goto printI
}
答案 1 :(得分:0)
如果你需要确保“i”变量是一个字节(即uint8),那么你可以这样做:
for i := byte(0); i < 255; i++ {
fmt.Println(i)
}
答案 2 :(得分:0)
或者,如果您想保留传统的for循环语法以提高可读性-
for i := 0; i < 256; i++ {
fmt.Println(byte(i))
}
答案 3 :(得分:-1)
对我而言,fmt.Println(byte(i))
似乎正在发挥作用。你期待什么输出?