【问题标题】:Why Encoding.Unicode.GetBytes() returns an additional 0为什么 Encoding.Unicode.GetBytes() 返回一个额外的 0
【发布时间】:2015-09-15 12:06:42
【问题描述】:

我正在使用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

为什么总是添加这个零?

【问题讨论】:

标签: c# vb.net unicode encoding byte


【解决方案1】:

.Net 使用 Unicode UTF16(以 little-endian 字节顺序)作为从 Encoding.Unicode.GetBytes() 类型返回的值,UTF16 对每个常规字符使用 2 个字节。 (UTF16 也用于string 类型。)

所以对于 2 m,你得到 4 个字节,每个 m 有 109 和 0。

您看到的 0 不是 NUL 终止符。它是字符代码的一部分。

(注意,对于 ASCII 字符,UTF16 表示的高字节设置为 0,低字节设置为字符的 ASCII 码。m 的 ASCII 码为 109。)

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 2015-03-02
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2013-08-18
    相关资源
    最近更新 更多