C#将字节数组转换为int始终相同的数字

时间:2011-12-29 22:47:04

标签: c# byte

我有一个将字节数组转换为整数

的方法
public int Encode(string input)
{
    var bytes = Encoding.Unicode.GetBytes(input.ToLowerInvariant());
    return BitConverter.ToInt64(bytes,0);
}

为什么这个整数对于任何输入字符串都没有区别?

例如

input = "http://www.google.com => 31525695615402088

input = "http://www.microsoft.com => 31525695615402088

6 个答案:

答案 0 :(得分:6)

因为64位是8个字节,所以ToInt64仅消耗输入数组的前8个字节。您使用的字符串的前八个字节是什么?

而且,正如alexm所说,Encoding.Unicode指定UTF-16,其中每个字符实际上是两个字节(usually),因此只有前4个字符计数。

答案 1 :(得分:3)

'h' == 0x68
't' == 0x74
'p' == 0x70

小端,双字节字符,所以" http"为您提供一个以:

开头的数组
{ 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00 ...

将其解释为小端32位整数,然后得到:

0x0070007400740068

其中,当然等于31525695615402088

答案 2 :(得分:2)

int64是8个字节。我相信你可以从那里弄明白。

答案 3 :(得分:2)

这是因为64位整数使用8字节的内存,而BitConverter只会使用您指定的字节数组的前8个字节进行转换,从位置0开始。您提供的每个样本输入都以相同的8开始字节。

对于它的价值,不可能将一个可变长度字符串的无损编码转换为大小为4-8字节的整数数据类型。您可能正在寻找一个哈希算法,它以有限的字节数表示您的数据。

答案 4 :(得分:0)

好吧,ToInt64使用8个字节 - 即4个unicode字符。

答案 5 :(得分:0)

因为BitConverter.ToInt64只占用字节数组的前8个字节,这些字节对于字符串是相同的。尝试输入字符串“google.com”和“yahoo.com”。