如何将字符串编码为8位ASCII字符?

时间:2015-11-18 21:19:26

标签: java c++ ascii

我正在尝试连接到另一个开发人员创建的服务器。他不再可用,所以我试图解释他的意思。

我正在创建一条UDP消息以发送到服务器,并且在消息的必填字段之一的说明中,他有这个:

客户端的名称,使用8位ASCII字符编码

例如,如果我想使用名称" MyName",结果将是(char,dec,hex):

| M |  77 | 0x4D |
| y | 121 | 0x79 |
| N |  78 | 0x4E |
| a |  97 | 0x61 |
| m | 109 | 0x6D |
| e | 101 | 0x65 |

我对这个领域应该有什么感到困惑。应该是

0771217897109101

或者应该是

0x4D0x790x4E0x610x6D0x65

或者它应该是完全不同的东西吗?

作为一个FYI,他使用C ++编写服务器,我正在使用Java。我知道这并没有什么不同,我只是想加上那些信息。

1 个答案:

答案 0 :(得分:4)

您可以在Java中执行此操作:

String name = ...; // "MyName", etc
byte[] arr = name.getBytes(StandardCharsets.US_ASCII);
// append arr to UDP message as needed...

没有 8bit ASCII这样的东西。 ASCII仅 7位。超出有效ASCII范围(0-127)的字符值将转换为?(十六进制0x3F)。 128-255范围内的字符通常称为ANSI或扩展ASCII。这些是特定于语言环境的字符。如果服务器实际上需要 8bit 字符,那么它不期望ASCII,而是期望ANSI,这在使用非ASCII字符时会导致语言冲突。大多数现代服务器通常期望UTF-8允许8位字符数据。您将不得不参考此服务器的文档或源代码来确定它实际期望的内容。听起来它实际上可能期望7位ASCII字符简单地扩展到8位字节(因此不允许使用字符> 127)。