我尝试读取一个字符串,将其哈希,但是当我使用时(例如使用字符串“0”)
System.Text.Encoding.Unicode.GetBytes("0")
生成Bytes to hash我总是将EOF / EOL作为最后一个字节。
是否有一种简单的方法可以不在字节数组中获得EOL / EOF,或者我是否必须删除字节数组的最后一个字节,以摆脱它?
答案 0 :(得分:0)
使用小端字节顺序对UTF-16格式进行编码。
这意味着每个字符(至少)有两个字节。很容易证明当你获得UTF-16的字节时会发生什么,以及大端编码会发生什么以及UTF-8会发生什么:
Imports System.Text
Module Module1
Sub ShowAsHex(bb() As Byte)
Console.WriteLine(String.Join(" ", bb.Select(Function(b) Hex(b).PadLeft(2, "0"c))))
End Sub
Sub Main()
Dim bb = Encoding.Unicode.GetBytes("0")
ShowAsHex(bb)
bb = Encoding.Unicode.GetBytes("HELLO")
ShowAsHex(bb)
bb = Encoding.BigEndianUnicode.GetBytes("HELLO")
ShowAsHex(bb)
bb = Encoding.UTF8.GetBytes("0")
ShowAsHex(bb)
bb = Encoding.UTF8.GetBytes("HELLO")
ShowAsHex(bb)
Console.ReadLine()
End Sub
End Module
输出:
30 00
48 00 45 00 4C 00 4C 00 4F 00
00 48 00 45 00 4C 00 4C 00 4F
30个
48 45 4C 4C 4F
请注意,在较长的文本(“HELLO”)中有一些值为零的字节,因此它们不能代表EOL / EOF,甚至不能代表C风格字符串的空终止符
因此,您解释为EOL / EOF字符实际上是该编码中字符的另一个字节。 Windows上的EOL通常是两个字节0D 0A,即CRLF或\ r \ n。
您似乎想要使用Encoding.UTF8
。