gpt4 book ai didi

arrays - C#数组如何存储在内存中

转载 作者:行者123 更新时间:2023-12-04 05:41:13 28 4
gpt4 key购买 nike

我想我的主要问题是,只要我不重新初始化(新字节 [#])作为参数传递的数组,这是否总是有效?

static unsafe decimal GetDecimal(byte[] ba)
{
decimal* decimal_PTR;
fixed (byte* byte_PTR = &ba[0])
{
decimal_PTR = ((decimal*)byte_PTR);
}
return *decimal_PTR;
}

我不确定 C# 如何处理内存中的数组。直到大约一个小时前,我什至不知道它们是托管类型。我只想知道我是否将十进制作为字节 [] 传递,它是否总是返回正确的值?感谢您提供的任何其他信息。

最佳答案

在@MJLaukala 通过评论澄清之后:

  • .Net 中的数组就像任何其他语言一样是一块连续的内存。但与 C/C++ 不同的是,该块不仅存储数组的元素,还存储其他“信息”,包括数组的秩和长度。话虽如此,&ba[0] 将返回指向数组第一个元素的指针,您可以安全地将指针递增到最后一个元素。 ba.Length 将提供数组中元素的数量。
  • 现在,如果您确定字节数组准确地表示十进制,那么您的代码将可以正常工作。

  • 十进制(128位)的内存布局:

    前 2 个字节为 0

    第 3 个字节包含 0 到 28 之间的值,表示 10 的幂除以 96 位整数部分以生成十进制值

    第 4 字节:前 7 位为零,第 8 位表示十进制的符号(1 表示负数)

    接下来的 12 个字节:十进制的整数部分。

    关于arrays - C#数组如何存储在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11219041/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com