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在网络中传输是,是什么形式的??
...全文
219 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
为什么没人帮我啊,

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧