13

我编写了自己的类,它将 C# 标准原语转换为字节数组。

后来,我看了一下BitConverter,看看专业人士是如何做到的。

我的代码示例:

public static byte[] getBytes(short value) {
    byte[] bytes = new byte[2];

    bytes[0] = (byte)(value >> 8);
    bytes[1] = (byte)value;

    return bytes;
}

BitConverter 类代码:

public unsafe static byte[] GetBytes(short value) 
{ 
    byte[] bytes = new byte[2];
    fixed(byte* b = bytes) 
        *((short*)b) = value;
    return bytes;
}

为什么它们的功能被标记为不安全并使用固定运算符?

即使它们使用不安全,这些功能是否容易出错?我应该放弃我的并使用他们的实现吗?哪个更有效率?

4

1 回答 1

12

是的,放下你的并使用标准库。

它更有效,因为它通过将字节数组转换为短指针来一次复制两个字节。为此,它需要修复以允许使用指针,因此需要使用 unsafe 关键字。

通常在您自己的程序集中应避免使用不安全代码,因为这意味着您的代码无法保证安全,因此只能在完全受信任的环境中运行。

但是,由于 Bitconverter 是由 Microsoft 签名的标准 .Net 程序集的一部分,Windows 知道它们是可以的。

库函数也不太容易出错,因为每天都有数百万开发人员使用它们,而您的函数只由您测试过。

于 2015-08-15T11:31:39.013 回答