检查字节是否为0x00

Bud*_*Joe 5 c# byte bit-manipulation bytearray

编写此方法的最具可读性(和惯用语)是什么?

private bool BytesAreValid(byte[] bytes) {
    var t = (bytes[0] | bytes[1] | bytes[2]);
    return t != 0;
}
Run Code Online (Sandbox Code Playgroud)

我需要一个函数来测试一个不是以它开头的文件的前三个字节00 00 00.

没有做太多的字节操作.上面的代码对我来说似乎不正确,因为t推断了类型Int32.

Jon*_*eet 14

t 类型推断是一个 Int32

是的,因为|运算符(像大多数运算符一样)没有定义byte- 字节被提升为int值.(有关详细信息,请参阅C#4规范的第7.11.1节.)

但鉴于你只想将它与0进行比较,无论如何都没关系.

就个人而言,我只是把它写成:

return bytes[0] != 0 && bytes[1] != 0 && bytes[2] != 0;
Run Code Online (Sandbox Code Playgroud)

甚至:

return (bytes[0] != 0) && (bytes[1] != 0) && (bytes[2] != 0);
Run Code Online (Sandbox Code Playgroud)

这些都对我来说更清楚.