关于int转byte会丢失精度的问题
在第三版 的第12章 555页,有行代码是输入一个ip地址,但是实际显示由于精度丢失,导致最后结果显示的是负数,请问怎么处理呢?
下面是实现ip输入的代码
按照书上说的,这样显示出来 前2位就是负数了,int转byte的时候超过127就会丢失导致的,请问怎么解决这个问题?
JFormattedTextField ipField = new JFormattedTextField(ipFormatter);
ipField.setValue(new byte[] { (byte)(192), (byte)168, 4, 1 });
addRow("IP地址格式", ipField);下面是实现ip输入的代码
class IPAddressFormatter extends DefaultFormatter {
public String valueToString(Object value) throws ParseException {
if (!(value instanceof byte[])) {
throw new ParseException("该IP地址的值只能是字节数组", 0);
}
byte[] a = (byte[]) value;
if (a.length != 4) {
throw new ParseException("IP地址必须是四个整数", 0);
}
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 4; i++) {
int b = a[i];
if (b < 0)
b += 256;
builder.append(String.valueOf(b));
if (i < 3)
builder.append('.');
}
return builder.toString();
}
public Object stringToValue(String text) throws ParseException {
// 将格式化文本框内的字符串以点号(.)分成四节。
String[] nums = text.split("\\.");
if (nums.length != 4) {
throw new ParseException("IP地址必须是四个整数", 0);
}
byte[] a = new byte[4];
for (int i = 0; i < 4; i++) {
int b = 0;
try {
b = Integer.parseInt(nums[i]);
} catch (NumberFormatException e) {
throw new ParseException("IP地址必须是整数", 0);
}
if (b < 0 || b >= 256) {
throw new ParseException("IP地址值只能在0~255之间", 0);
}
a[i] = (byte) b;
}
return a;
}
}按照书上说的,这样显示出来 前2位就是负数了,int转byte的时候超过127就会丢失导致的,请问怎么解决这个问题?
...全文
相关推荐
java数据类型转换[文].pdf
java数据类型转换[文].pdf
java数据类型转换.pdf
java数据类型转换.pdf
Android数据类型之间相互转换系统介绍
一些初学Android的朋友可能会遇到JAVA的数据类型之间转换的苦恼,例如,整数和float,double型之间的转换,整数和String类型之间的转换,以及处理、显示时间方面的问题等。下面笔者就开发中的一些体会介绍给大家。 我们知道,android的数据类型分为三大类,即布尔型、字符型和数值型,而其中数值型又分为整型和浮点型;相对于数据类型,Java的变量类型为布尔型 boolean;字符型char;整型byte、short、int、long;浮点型float、double。其中四种整型变量和两种浮点型变量分别对应于不同的精度和范围。此外,我们还经常用到两种类变量,即String和Date
c#数值类型,转换和装箱拆箱
c#的数值类型还有装换和重要的装箱和拆箱,以及实例,很不错的哦
JAVA-type.rar_java Type
这是我总结的JAVA数据类型转换,可以值得一看


Java SE

