我编写了自己的类,将C#标准基元转换为字节数组。
稍后,我查看了BitConverter
班source,看看专业人士是如何做到的。
我的代码示例:
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;
}
为什么他们的功能被标记为不安全并使用固定运算符?
即使这些功能使用不安全,这些功能是否容易出错?我应该放弃我的并实施它们吗?哪个更有效率?
答案 0 :(得分:12)
是的,放弃你的并使用标准库。
它更有效,因为它通过将字节数组转换为短指针来一次复制两个字节。要做到这一点,它需要修复以允许使用指针,因此不安全的关键字。
在您自己的程序集中通常要避免使用不安全的代码,因为这意味着您的代码无法保证安全,因此只能在完全受信任的环境中运行。
但是,由于Bitconverter是Microsoft签署的标准.Net程序集的一部分,因此Windows知道它们没问题。
库函数也不容易出错,因为每天都有数以百万计的开发人员使用库函数,而你的函数只经过了你的测试。