java 的无符号整型
java 是不支持无符号整型
在jdk1.5 中 int i=07010101; 这样写编译器并没有抱错
但int i=08010101; 这样就抱错
有没有人可以给解释一下
还有在java中怎么可以把08010101 这样的无符号整型向c#一样写入 new byte[4] 中
问题点数:20、回复次数:9Top
1 楼ChDw(米)回复于 2006-03-09 11:15:52 得分 5
你搞错了,Java中以0开头表示的是8进制!所以08001这样是错误的
0x开头才是16进制
你需要的话可以 int i = 0x08 << 24 | 0x01 << 16 | 0x01 << 8 | 01Top
2 楼xiaopeipei2004(小裴)回复于 2006-03-09 11:24:01 得分 0
顶,学习一下Top
3 楼evo_vii()回复于 2006-03-09 11:31:51 得分 0
我现在在写一个协议 协议中是这么定义 08010101
定长String, 它由一系列的10进制字符组成(ASCII码‘0’---‘9’),右齐左补‘0’(ASCII码48)。
08010101 是这个协议中的一个字段 协议中它的定长是4个字节
在c# 中可以把 08010101定义为一个无符号整型就可以解决
但是在java中要怎么解决哪???Top
4 楼evo_vii()回复于 2006-03-09 11:51:39 得分 0
按照上面说的它是顶长的10进制String 哪他的长度就是8个字节 郁闷了一上午了有没有可以帮忙解决一下Top
5 楼ChDw(米)回复于 2006-03-09 12:06:21 得分 0
搞不明白,你到底是要整数还是字符串?
如果是字符串,你使用Int做什么?如果是Int那么08这个是错误的,因为8进制中不存在8Top
6 楼ahlon(Ahlon)回复于 2006-03-09 12:14:22 得分 5
0开头的int数值应该是表示的8进制,但是8进制中是没有8的,最高是7,所以.......Top
7 楼treeroot(旗鲁特)回复于 2006-03-09 12:20:35 得分 0
upTop
8 楼qybao(阿宝)回复于 2006-03-09 12:24:56 得分 10
还有在java中怎么可以把08010101 这样的无符号整型向c#一样写入 new byte[4] 中
----------------------------
首先,以0打头的数表示8进制数,8进制数最大数字只能到7(即0-7是有效数字),而08xxx中,8已经不是有效数字了,所以就报错了。
像ChDw(米)说的
你需要的话可以 int i = 0x08 << 24 | 0x01 << 16 | 0x01 << 8 | 01
要存在byte中可以这样
byte b[] = new byte[4];
b[0] = 0x08;
b[1] = 0x01;
b[2] = 0x01;
b[3] = 0x01;
或
int i = 0x08 << 24 | 0x01 << 16 | 0x01 << 8 | 01
b[0] = (i & 0xff000000) >> 24;
b[1] = (i & 0x00ff0000) >> 16;
b[2] = (i & 0x0000ff00) >> 8;
b[3] = (i & 0x000000ff);
Top
9 楼evo_vii()回复于 2006-03-09 12:41:58 得分 0
暂时我也是这么解决的
public static byte[] hexString2byte(String hexString) {
if (hexString == null || hexString.length() % 2 != 0)
return null;
byte[] result = new byte[hexString.length() / 2];
for (int i = 0; i < hexString.length(); i += 2)
result[i / 2] = (byte) (Integer.parseInt(hexString.substring(i,
i + 2), 10) & 0xff);
return result;
}
但是不知道服务器那边能不能认啊
先谢谢大家了 到测试的时候服务器那边不认再向大家请教Top




