gpt4 book ai didi

c# - Ascii 字节数组到 Int32 或 Double

转载 作者:太空宇宙 更新时间:2023-11-03 20:41:19 25 4
gpt4 key购买 nike

我正在重写库,要求它完全免费分配。目标是在应用程序的启动阶段完成后拥有 0 个集合。

以前有很多这样的电话:

Int32 foo = Int32.Parse(ASCIIEncoding.ASCII.GetString(bytes, start, length));

我认为这是在分配一个字符串。我找不到可以自动执行相同操作的 C# 库函数。我查看了 BitConverter 类,但看起来只有当您的 Int32 使用代表它的实际字节进行编码时才会这样。在这里,我有一个字节数组,表示代表 Int32 的 Ascii 字符。

这是我做的

public static Int32 AsciiBytesToInt32(byte[] bytes, int start, int length)
{
Int32 Temp = 0;
Int32 Result = 0;
Int32 j = 1;

for (int i = start + length - 1; i >= start; i--)
{
Temp = ((Int32)bytes[i]) - 48;

if (Temp < 0 || Temp > 9)
{
throw new Exception("Bytes In AsciiBytesToInt32 Are Not An Int32");
}

Result += Temp * j;
j *= 10;
}

return Result;
}

有谁知道已经以更优化的方式执行此操作的 C# 库函数?或使上述运行速度更快的改进(一天中可能会被调用数百万次)。谢谢!

最佳答案

每天数百万次应该不是问题 - 我希望它能够每秒运行数十万次。就我个人而言,我会重写上面的内容以仅在循环内声明“temp”(并摆脱 Pascal 案例局部变量名称 - urgh)但它应该没问题。

代码将更容易理解:

int digit = bytes[i] - '0';

和你的一样

Temp = ((Int32)bytes[i]) - 48;

行,但以更简单的方式 (IMO)。它们的行为方式应该完全相同。

总的来说,尝试在没有任何分配的情况下编写 C# 是相当苛刻的,并且与语言和框架的设计方式背道而驰。您认为这实际上是一个合理的要求吗?诚然,我听说过一些游戏是用托管代码编写的……但这看起来确实有点奇怪。

当然,如果字节不合适,你会分配一个异常......

编辑:请注意,您的代码不允许使用负数。可以吗?

关于c# - Ascii 字节数组到 Int32 或 Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2523151/

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