1

假设我有以下代码:

int two = 2;
String twoInBinary = Integer.toString(two, 2);

twoInBinaryString 现在将保存value 10。但似乎基数信息在这种转换中完全丢失了。因此,如果我twoInBinary作为 XML 文件的一部分通过网络发送并希望将其反序列化为整数格式,就像这样......

int deserializedTwo = Integer.parseInt(twoInBinary);

...然后deserializedTwo将等于10而不是2(十进制)。

我知道有Integer.parseInt(String s, int radix),但是在一个复杂的系统中,对许多不同的字符串使用许多不同的基数,是否可以保留基数信息而不必为您的值保留一个单独的、同步的日志?

4

2 回答 2

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>

这当然不保留基数信息。

干杯,

于 2012-10-08T12:40:33.003 回答
2

如果您将其作为 XML 文件的一部分发送,则必须使用正确的数据类型定义。XML 模式支持许多不同的内置类型来准确描述您的类型。

所以<value>10</value>目前可能正在描述一个integer,它被定义为以 10 为底。您可以很容易地描述一种新的简单类型,它将数字表示为以 2 为底。

于 2012-10-08T12:46:14.017 回答