15

有方法Integer.toHexString()Long.toHexString()。由于某种原因,他们没有实施Short.toHexString().

将 Short 转换为十六进制字符串的规范方法是什么?

无法使用Integer.toHexString(),因为Integer.toHexString(-33)equalsffffffdf不是一个短值。

4

5 回答 5

25

如果在您的系统short中表示为 16Bit,您也可以简单地执行以下操作。

String hex = Integer.toHexString(-33 & 0xffff);
于 2012-11-13T07:56:03.970 回答
4

是的,您可以简单地取两个最不重要的字节。

这是二进制补码表示的一个基本特征。

于 2012-11-13T07:50:38.400 回答
2

您可以将Integer.toHexStringin 转换为短值的十六进制字符串。

Integer属于32 bit,Short属于16 bit. 因此,您只需从Hex Stringfor中删除 16 个最高有效位short value即可转换为integer, 以获得Hex Stringfor Short

Integer -> -33 = 11111111 11111111 11111111 11011111  == Hex = ffffffdf
Short   -> -33 =                   11111111 11011111  == Hex =     ffdf

因此,只需使用的最后一个4字符Hex String即可获得所需的内容。

所以,你想要的是: -

Short sh = -33;
String intHexString = Integer.toHexString(sh.intValue());
String shortHexString = intHexString.substring(4);

我认为那会奏效。

于 2012-11-13T07:45:19.763 回答
1

这也应该适用于短期

UnicodeFormatter.charToHex((char)c);

您可以在此处下载 UniocdeFormatter.java:http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/i18n/text/examples/UnicodeFormatter 。爪哇

于 2014-04-05T05:30:31.110 回答
0

这不是最简单的方法,但我可以通过转换为字节数组然后将其转换为十六进制字符串来完成。

 short a = 233;
 byte[] ret = new byte[2];

 ret[0] = (byte)(a & 0xff);
 ret[1] = (byte)((a >> 8) & 0xff);

 StringBuilder sb = new StringBuilder();
 for (byte b : ret) {
    sb.append(String.format("%02X ", b));
 }

我认为这几乎可以做到。

于 2012-11-13T07:42:37.880 回答