GetBytes函数是如何工作的
本文关键字:工作 何工作 函数 GetBytes | 更新日期: 2023-09-27 18:08:08
我编写了自己的类,将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;
}
为什么它们的函数被标记为不安全并使用固定操作符?
这样的函数即使使用不安全函数也容易出错吗?我应该放弃我的,使用他们的实现吗?哪个更有效率?
是的,放下你的,使用标准库。
更有效,因为它通过将字节数组强制转换为短指针来一次复制两个字节。要做到这一点,需要允许使用指针,因此需要使用不安全的关键字。
通常在您自己的程序集中避免使用不安全的代码,因为这意味着您的代码不能保证安全,因此只能在完全受信任的环境中运行。
然而,由于Bitconverter是由Microsoft签名的标准。net程序集的一部分,Windows知道它们是ok的。
库函数也更不容易出错,因为它们已经被数百万每天使用它们的开发人员所强化,而你的函数只被你自己测试过。