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

标签 java c++ ascii

<分区>

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

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

A name for the Client, encoded using 8-bit ASCII characters

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

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

对于该字段中应该包含什么,我只是有点困惑。应该是吧

0771217897109101

或者应该是

0x4D0x790x4E0x610x6D0x65

还是应该完全不同?

仅供引用,他使用 C++ 编写服务器,而我使用 Java。我知道这没有什么区别,我只是想添加一点信息。

最佳答案

您可以在 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 个字符)。

关于java - 如何将字符串编码为 8 位 ASCII 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790607/

相关文章:

java - 野蝇 8 : Separate thread pool for different applications

c++ - 运算符重新分配函数/构造返回什么?

java - 在Java中用ASCII和Hex形式初始化一个字节有什么区别吗?

java - Lightbend Lagom - 如何重构 Java EE 整体架构

java - 无法使用jdbc preparedstatement查询mysql数据库

c++ - 使用 cout 打印递增的字符

c++ - 可变模板参数包转发中的语法差异

c# - 无法通过 SQL 查询插入 Char(63)

c - "Clear line"USART 通信命令 : which escape character?

java - 用图形制作棋盘