【问题标题】:Equivalent of Convert.ToChar(byte) in .Net 2.0?.Net 2.0 中 Convert.ToChar(byte) 的等价物?
【发布时间】:2023-03-12 17:58:01
【问题描述】:

我仅限于使用 .Net 2.0 并尝试编写将字节转换为字符的东西。

理想情况下,我会使用Convert.ToChar(buffer[i]);byte 中的byte[] 数组中获取一个字符,但在.Net 2.0 中此功能不存在。使用BitConverter.ToChar(buffer, i) 似乎总是会导致数组越界错误。

有人对我如何在 .Net 2.0 中将字节转换为字符有任何建议吗?

【问题讨论】:

  • 字节在什么字符集中? ASCII?
  • buffer[i] 字节数组吗?请注意,BitConverter.ToChar(buffer, i) 需要来自buffer 的两个字节,因此起始索引i 应小于buffer.Length - 1
  • ascii 可以包含来自英语、德语、法语等其他语言的特殊字符。

标签: c# char byte c#-2.0


【解决方案1】:

如果您只有一个byte,那么您必须假设该字符是 ASCII。 char 是 Unicode 16。ASCII 的第一个 128 码值直接映射到 Unicode。所以试试这个

public char ToChar(byte b)
{
  if (b < 0 || b > 127)
     throw new ArgumentException("Not an ASCII character.");
  return (char) b;
}

更新

现在大多数网络软件都假定字符串以 UTF-8 编码。因此,如果您知道缓冲区中的字节数,那么您应该这样做

var s = Encoding.Utf8.GetString(buffer, i, n);

其中n是字节数。

【讨论】:

  • 但是 OP 谈到了 byte 的数组,所以它们可以来自多字节字符集。但是根据您定义的假设,您的代码应该可以工作。
  • 需要考虑到不同的语言,例如带有特殊字符和符号的德语。
  • 查看我的更新。您必须考虑正在使用什么编码。如果是 UTF-8,则可以解码语言(特殊字符和符号)。
猜你喜欢
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 2010-10-31
  • 2018-08-07
  • 2011-06-01
相关资源
最近更新 更多