gpt4 book ai didi

c# - 将 4 个字符的字符串转换为 int32

转载 作者:太空狗 更新时间:2023-10-30 00:09:02 28 4
gpt4 key购买 nike

有没有一种快速的方法可以将 4 个字符转换为 32 位整数?我知道我可以循环遍历它:

string key = "ABCD";
int val = 0;
for (int i = 0; i < 4; i++)
{
int b = (int)key[i] * (int)Math.Pow(256, i);
val += b;
}
// val = 1145258561

我想要更低级别的东西,我知道字符是以字节形式存储的。我不介意它是否是不安全的代码,因为我基本上是在尝试将一个 4 字符的字符串写入一个整数指针位置。

最佳答案

您可以先使用适当的编码将字符串转换为字节数组(参见 Encoding.GetEncoding ),然后您可以使用 BitConverter.ToInt32将字节数组转换为整数。

string s = "ABCD";
byte[] bytes = encoding.GetBytes(s); /* Use the correct encoding here. */
int result = BitConverter.ToInt32(bytes, 0);

结果:

1145258561

要从整数中取回字符串,只需反转过程即可:

int i = 1145258561;
byte[] bytes = BitConverter.GetBytes(i);
string s = encoding.GetString(bytes);

结果:

ABCD

请注意,BitConverter 类给出的结果取决于运行它的机器的字节顺序。如果您希望代码独立于平台,您可以查看 Jon Skeet 中的 EndianBitConverter。的 MiscUtil图书馆。


性能

我测试了三种实现的性能:

Math.Pow

int convert1(string key)
{
int val = 0;
for (int i = 0; i < 4; i++)
{
int b = (int)key[i] * (int)Math.Pow(256, i);
val += b;
}
return val;
}

比特转换器

int convert2(string key)
{
byte[] bytes = encoding.GetBytes(key);
int result = BitConverter.ToInt32(bytes, 0);
return result;
}

位移位

int convert3(string key)
{
int val = 0;
for (int i = 3; i >= 0; i--)
{
val <<= 8;
val += (int)key[i];
}
return val;
}

循环展开

int convert4(string key)
{
return (key[3] << 24) + (key[2] << 16) + (key[1] << 8) + key[0];
}

结果

最大就是最好的性能:

Method         Iterations per second------------------------------------Math.Pow                      690000BitConverter                 2020000Bit shifting                 4940000Loop unrolled                8040000

结论

如果性能至关重要,那么编写您自己的方法来进行位移可以获得最佳性能。对于性能不重要的大多数情况,使用标准类 BitConverter 可能没问题(假设您不介意它仅适用于小端计算机)。

关于c# - 将 4 个字符的字符串转换为 int32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3858908/

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