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;
}

为什么它们的函数被标记为不安全并使用固定操作符?

这样的函数即使使用不安全函数也容易出错吗?我应该放弃我的,使用他们的实现吗?哪个更有效率?

GetBytes函数是如何工作的

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

更有效,因为它通过将字节数组强制转换为短指针来一次复制两个字节。要做到这一点,需要允许使用指针,因此需要使用不安全的关键字。

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

然而,由于Bitconverter是由Microsoft签名的标准。net程序集的一部分,Windows知道它们是ok的。

库函数也更不容易出错,因为它们已经被数百万每天使用它们的开发人员所强化,而你的函数只被你自己测试过。