- 主题:为什么这么奇怪?
java里比如
String s = Long.toHexString(-1L);
输出是"ffffffffffffffff",16个f,没问题。
然后我再调用parse,它就出错了
long v = Long.parseLong(s, 16);
抛出异常java.lang.NumberFormatException: For input string: "ffffffffffffffff"
它自己转换给我的,自己都无法重新解析出来?
看了资料似乎最大只能解析到Long.MAX_VALUE = "7fffffffffffffff"
如果要解析负数,只能写成Long.parseLong("-123abc", 16)这样。
那我要是接收到别人通过toHexString传给我的hex表达,我还得自己先判断一下,字符串代表的值是正数还是负数,若是负数还得手动做个转化,再喂给parseLong?
--
FROM 36.22.100.*
谢谢,您这个是OK的。
经过测试,发现解析任意的hex串,只要调用Long.parseUnsignedLong就行了。
那既然Long.parseUnsignedLong可以完全替代Long.parseLong的话,是不是jdk保留Long.parseLong只是为了api的兼容性?
【 在 z16166 的大作中提到: 】
: hex串视为无符号数(因为最高的符号bit并没做特殊处理,和其他的bit一视同仁的),所以该用Long.parseUnsignedLong()
--
修改:webhost FROM 36.22.100.*
FROM 36.22.100.*
ok,明白你的意思了。
不过我的需求里,不解析这种,我这边只解析别人传给我的hex串,而他的hex,实际就是从Long.toHexString而来的,这样的hex串,应该只用parseUnsignedLong就行了吧?
【 在 blueboats 的大作中提到: 】
: Long.parseLong("-2")你咋替代?
: 谢谢,您这个是OK的。
: 经过测试,发现解析任意的hex串,只要调用Long.parseUnsignedLong就行了。
: ...................
--
FROM 36.22.100.*