繁体   English   中英

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

[英]C# convert byte array to int always same number

我有一种方法可以将字节数组转换为整数

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

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

而且,正如alexm所指出的, Encoding.Unicode指定UTF-16,其中每个字符实际上是两个字节( 通常为 ),因此仅前四个字符计数。

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

小尾数,两个字节的字符,因此“ http”为您提供了一个以以下内容开头的数组:

{ 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00 ...

将此解释为32位低端整数,您将得到:

0x0070007400740068

当然等于31525695615402088

一个int64是8个字节。 我相信您可以从那里弄清楚。

发生这种情况的原因是64位整数使用8个字节的内存,并且BitConverter仅使用指定的字节数组的前8个字节(从位置0开始)进行转换。您提供的每个样本输入都以相同的8个字节开头。

就其价值而言,不可能将可变长度的字符串进行无损编码为大小为4-8字节的整数数据类型。 您可能正在寻找一种哈希算法 ,该算法以有限的字节数表示您的数据。

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

因为BitConverter.ToInt64仅占用字节数组的前8个字节,而这与您的字符串相同。 尝试输入字符串“ google.com”和“ yahoo.com”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM