使用不安全代码的原因有三个:
我通常不使用它,但有时它非常有用:
例如,在我维护的一些序列化代码中,将一个float
写入流而无需使用BitConverter.GetBytes
(每次都创建一个数组)是很痛苦的 - 但我可以欺骗:
float f = ...;
int i = *(int*)&f;
现在我可以使用 shift (>>
) 等符号更轻松地编写 i
,而不是编写 f
(字节将与调用 BitConverter.GetBytes
相同,并且现在我通过选择如何使用 shift 来控制字节序)。
for cheating with data
。你真逗啊我的朋友!虽然我从没试过,但这个例子确实说得通! - Mike Perrenoud至少有一个托管的 .Net API 经常使使用指针不可避免。请参见 SecureString 和 Marshal.SecureStringToGlobalAllocUnicode。
获取 SecureString
的明文值的唯一方法是使用其中一个 Marshal
方法将其复制到非托管内存中。