为什么 Encoding.Unicode.GetBytes() returns 多一个 0
Why Encoding.Unicode.GetBytes() returns an additional 0
我正在使用 Encoding.Unicode.GetBytes()
将字符串转换为字节,但它总是添加一个额外的 zero
。我的代码是
Dim StringBytes As Byte() = Encoding.Unicode.GetBytes("s")
给出的结果为
115
0
另一个例子:
Dim StringBytes As Byte() = Encoding.Unicode.GetBytes("mm")
给出的结果为
109
0
109
0
为什么总是添加这个零?
.Net 使用 Unicode UTF16 (in little-endian byte order) for the value returned from Encoding.Unicode.GetBytes()
type, and UTF16 每个常规字符使用 2 个字节。 (UTF16 也用于 string
类型。)
所以对于 2 m,你得到 4 个字节,每个 m 一个 109 和 0。
您看到的 0
不是空终止符。它是字符代码的一部分。
(注意,对于ASCII字符,UTF16表示高字节设置为0,低字节设置为字符的ASCII码。m
的ASCII码为109。)
我正在使用 Encoding.Unicode.GetBytes()
将字符串转换为字节,但它总是添加一个额外的 zero
。我的代码是
Dim StringBytes As Byte() = Encoding.Unicode.GetBytes("s")
给出的结果为
115
0
另一个例子:
Dim StringBytes As Byte() = Encoding.Unicode.GetBytes("mm")
给出的结果为
109
0
109
0
为什么总是添加这个零?
.Net 使用 Unicode UTF16 (in little-endian byte order) for the value returned from Encoding.Unicode.GetBytes()
type, and UTF16 每个常规字符使用 2 个字节。 (UTF16 也用于 string
类型。)
所以对于 2 m,你得到 4 个字节,每个 m 一个 109 和 0。
您看到的 0
不是空终止符。它是字符代码的一部分。
(注意,对于ASCII字符,UTF16表示高字节设置为0,低字节设置为字符的ASCII码。m
的ASCII码为109。)