假设我有以下代码:
int two = 2;
String twoInBinary = Integer.toString(two, 2);
twoInBinary
字符串现在将保留值10
。但似乎基数信息在这种转变中完全丢失了。所以,如果我通过网络发送twoInBinary
作为XML文件的一部分,并希望将其反序列化为整数格式,就像这样......
int deserializedTwo = Integer.parseInt(twoInBinary);
...然后deserializedTwo
将等于10
而不是2
(十进制)。
我知道有Integer.parseInt(String s, int radix)
,但是在一个复杂的系统中,对于许多不同的字符串使用了许多不同的基数,是否可以保留基数信息而无需为您的值保留单独的同步日志? / p>
答案 0 :(得分:2)
简短回答:不,不是标准的Java。然而,编写一个Serializable
类可以通过线路传输值和基数信息是微不足道的。
class ValueWithRadix implements Serializable
{
int radix;
String value;
}
int deserializedTwo = Integer.parseInt( valueWithRadix.getValue() , valueWithRadix.getRadix() );
编辑:为了更清楚地说明,线上的XML可能看起来像
<ValueWithRadix>
<value>10</value>
<radix>2</radix>
</ValueWithRadix>
而不仅仅是
<value>10</value>
当然不保留基数信息。
干杯,
答案 1 :(得分:2)
如果您将其作为XML文件的一部分发送,则必须使用正确的数据类型定义。 XML模式支持lot of different built-intypes准确描述您的类型。
所以<value>10</value>
目前可能正在描述integer
,它被定义为基数10.您可以很容易地描述一个新的简单类型,它将数字表示为基数2.