java中的十六进制整数给出了很大的价值?

时间:2016-09-08 18:16:15

标签: java data-conversion

我实际上是从java socket bufferedread中读取int值,然后转换为十六进制表示。 我使用的方法如下。

StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(nextChar));

if (sb.length() < 2) {
    sb.insert(0, '0'); //pad with leading zero if needed
}

String hexChar = sb.toString();
System.out.println("\n\n hex value is "+hexChar +"   "+"Int value is:"+nextChar);

代码工作正常。只有我得到一个或两个数据,在正常情况下转换成十六进制后是BE或A9但是我得到ffdd并且整数值是65533.可能是我的转换方法是错误的还是输入值是它自己有这个值?

1 个答案:

答案 0 :(得分:1)

它并不是很清楚你正在尝试做什么,但正如documentation中所定义的那样,读取的回报是:字符读取,为0到65535范围内的整数(0x00-0xffff),如果已到达流的末尾,则返回-1。

这当然是因为您使用的是文本阅读器。

您可能需要阅读this answer

好的,明白了。

您认为您正在读取字节,但由于您使用的是BufferedReader,因此您实际上读取了字符( 字符数据类型是一个16位Unicode字符。它的最小值为&#39; \ u0000&#39;(或0)和&#39; \ uffff&#39;(或65,535(含))的最大值。

我相信这就是你想要实现的目标。请注意,这不是最佳方式,只是一个样本!

numPartitions = numWorkerNodes * numCpuCoresPerWorker