当 String 是有效的 char 时将 String 转换为 char

Posted

技术标签:

【中文标题】当 String 是有效的 char 时将 String 转换为 char【英文标题】:Converting String to char when String is a valid char 【发布时间】:2014-06-24 12:18:58 【问题描述】:

我正在使用蓝牙进行套接字通信,其中我将十六进制值作为字符串格式的变量。

我会写 -

char char1= 0x7D;

但不知何故,如果值0x7D 是字符串,那么如何将其转换为字符。

例如,我做不到-

String string1 = "0x7D";
char char1 = (char)string1;

有什么方法可以做到这一点?

我想要这个,因为我可以用 - 写入套接字

char[] uploadCommand2 =  0x7d, 0x4d, 0x01, 0x00, 0x01, 0xcb;

但如果0x7d 是一个类似 --

的字符串,则不能
char[] uploadCommand2 =  string1, 0x4d, 0x01, 0x00, 0x01, 0xcb;

【问题讨论】:

How to convert/parse from String to char in java? 的可能重复项 @UrsulRosu - 这将为他返回“0”。不是他想要的 不是重复的,我不明白为什么这被否决了。这是一个很好的问题,问得恰当,有足够的信息来尝试回答它。 @njzk2 删除了关闭投票。那是他编辑之前的问题... :) 【参考方案1】:

如果您去掉十六进制 String 表示的 0x 前缀,您可以使用 Integer.parseInt 并转换为 char

请参阅下面的 edit 以获取替代方案(可能更优雅的解决方案)。

String s = "0x7D";
//                  | casting to char
//                  |    | parsing integer ...
//                  |    |                | on stripped off String ...
//                  |    |                |               | with hex radix
System.out.println((char)Integer.parseInt(s.substring(2), 16));

输出


编辑

正如njzk2 指出的那样:

System.out.println((char)(int)Integer.decode(s));

... 也可以。

【讨论】:

见 ***.com/a/11377996/671543 不需要去掉 0x,decode 这样做 @Mena - 不剥离 0x 就不可能吗?我不能得到 char 0x7D 吗? 在 njzk2 的建议之后,@VedPrakash 看到我的编辑。 decode 方法可以做到这一点。但是你需要双重施法。【参考方案2】:

Integer.parseInt(String) 返回给定字符串的整数表示,然后您可以从中获取字符。

【讨论】:

【参考方案3】:
String string1 = "0x7D";
char char1 = (char) Integer.parseInt(string1.substring(2), 16);

编辑:这行得通,但 Integer.decode() 是去这里的方式(感谢 njzk2)。

【讨论】:

不剥离 0x 就不可能吗?我不能得到 char 0x7D 吗? @VedPrakash: 否。文档指出字符串只能包含+- 和指定基数的数字(在这种情况下,0 - 9、@987654328 @ - f, A - F)。

以上是关于当 String 是有效的 char 时将 String 转换为 char的主要内容,如果未能解决你的问题,请参考以下文章

利用char, str2mat, strvcat创建多行字符串数组

如何把c++的char字符型转换为string

如何从string类型的变量 返回一个char* 类型

string类实现

深拷贝 std::string::c_str() 到 char * [重复]

TypeScript 基础 — string 和 String 的区别