繁体   English   中英

GetBytes函数如何工作?

[英]How does the GetBytes function work?

我编写了自己的类,将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知道它们没问题。

库函数也不容易出错,因为它们已经被数百万开发人员每天使用它们进行了战斗,而你的函数只经过了你的测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM