我正在尝试连接到另一个开发人员创建的服务器。他不再可用,所以我试图解释他的意思。
我正在创建一条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。我知道这并没有什么不同,我只是想加上那些信息。
答案 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)。