【问题标题】:How can I convert char to byte?如何将字符转换为字节?
【发布时间】:2012-10-30 09:16:54
【问题描述】:

我有一个简单的问题。 我们知道Char 占用两个字节(16 位),Byte 占用一个字节(8 位)。 但在许多编程语言中,有一个函数可以将Char 转换为Byte。如何将Char 转换为Byte 而不会丢失任何内容?

【问题讨论】:

  • 我的意思是如何将 16 位信息放到一半,到 8 位
  • 我对这个问题投了反对票。但是在SCALA lang 中。它具有将CHAR 转换为BYTE 的方法,名为toByte

标签: char type-conversion byte


【解决方案1】:

在 C# 和 java 中 char 是 16 位 Unicode 字符。在其他(较旧的?)语言(C、C++ 等)中,chars 是 ASCII 字符的 8 位表示。在这些语言中,在不丢失任何内容的情况下转换类型是有意义的。

在 C# 中,您可以将 chars 转换为两倍的 bytes,或者假设(确实)您尝试转换的 chars 是 8 位 chars(查看ASCII 表)写成 Unicode chars。

【讨论】:

    【解决方案2】:

    这是不可能的。我认为没有任何语言带有这样的功能。比如Java有String.getBytes,C#有Encoding.GetBytes,他们得到的是bytes,而不是byte。这种转换就像C语言中的short[]char[]的转换,非常简单,没有任何操作,只是转换,整个对象的大小(字节总数)保持不变;什么都没有丢失。

    【讨论】:

    • 是的,我同意你的看法,但是在 SCALA 中,Char 是 16 位的,它有 toByte 函数可以返回该 char 的 8 位值,也许它不关心值溢出
    • 我刚刚检查了 scala API,它的 Char 类确实有一个 toByte。但我认为它所做的只是一个不安全的转换,比如int i = 42;char c = (char)i;,如果一个 UTF-16 字符表示一个 ASCII 字符,可以将它从宽字符转换为一个字节,因为 unicode 是 ASCII 的超集,字符在 0 到 127 之间的值与 ASCII 对应的含义相同。但每当文本包含 ASCII 以外的字符时,例如德国人或中国人,以这种方式投射会产生垃圾。
    • 是的 Need4Steed 你是对的,这是不安全的铸造。我也检查了
    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多