JAVA网络编程问题,我在char字符中存放的大于128的数值,发送到unix端,但是那边只能认识小于128的,大的就变成了63,见里面

Ge 2004-01-09 10:25:54
例如,public char[] packHead(int pLength)
{

char[] pHead = new char[5];
pHead[0] = 0x02;
pHead[1] = 0x00;
pHead[2] = 0x00;
pHead[3] = 0x00;
pHead[4] = (char)pLength;
System.out.println(pHead[4]);
return pHead;
}
当pLength小于128,在unix那边,能正常的得到数值,但是超过了128就变成了63,,如果用c的话又能正常的得到数值,,,,,,,请哪位高人能给我解释一下原因,,,JAVA中的char型字符是16位,,,c中的是8位,,那么java里的char在网络中传输是,是什么形式的??
...全文
119 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Ge 2004-01-10
有没有高人解决一下这个问题啊!!!!!!
  • 打赏
  • 举报
回复
Ge 2004-01-09
没又人知道吗?
  • 打赏
  • 举报
回复
Ge 2004-01-09
现在的情况是一端用的是java,一端是c,,,, ceileng888()是像你说的那样吗,,

所以128 用10000000 00000000
129 为10000000 00000001

疑惑,为什么要这么变呢,
  • 打赏
  • 举报
回复
Ge 2004-01-09
: ceileng888() ( ) 信誉:100 2004-01-09 14:40:00 得分:0


如果大于127就要用两位来表示
127表示为01111111
128本应为10000000
但判断如果8位二进制的首位为1 则用两位来表示
所以128 用10000000 00000000
129 为10000000 00000001

这个就是java的转换方式吗???,,那就只能用两位表示了,,
if (pLength<127)
{
pHead[0] = 0x00;
pHead[1] = (char)pLength;
}
else
{
pHead[0] = (char)(pLength/128);
pHead[1] = (char)(pLength%128);
}
只有这个办法了吗???
  • 打赏
  • 举报
回复
ceileng888 2004-01-09
如果大于127就要用两位来表示
127表示为01111111
128本应为10000000
但判断如果8位二进制的首位为1 则用两位来表示
所以128 用10000000 00000000
129 为10000000 00000001
  • 打赏
  • 举报
回复
toptry 2004-01-09
for example:

byte [] mm = new byte[2];
mm[0]=(byte)134;
mm[1]=(byte)135;
try
{
System.out.println(new String(mm,"GBK"));
}
catch(Exception e)
{
System.out.println(e);
}
  • 打赏
  • 举报
回复
toptry 2004-01-09
>127的是不可以看到的,java将认为是双字节的unicode编码,并且无法识别。
  • 打赏
  • 举报
回复
Ge 2004-01-09
用字节也出现同样的情况,java里的byte只能表示到127,,超过的,就变成了63,63是不是asii码的?号啊,,char字符,在网络中是怎么转换的啊,
  • 打赏
  • 举报
回复
Leemaasn 2004-01-09
既然这样,那你可以使用字节分离来解决吧。。


  • 打赏
  • 举报
回复
Ge 2004-01-09
为什么没人帮我啊,
  • 打赏
  • 举报
回复
相关推荐
发帖
Web 开发
加入

8.0w+

社区成员

Java Web 开发
社区管理员
  • Web 开发社区
申请成为版主
帖子事件
创建了帖子
2004-01-09 10:25
社区公告
暂无公告