免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3417 | 回复: 7
打印 上一主题 下一主题

16进制和String [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-14 16:11 |只看该作者 |倒序浏览
正在做一个C/S结构的系统,前台用java,后台是c,前后台通过自定应的协议进行通讯。我先在不知道前台到底该法给后台什么都西?

举个例子:协议中定义了通讯包以0x81作为头,那我的前端程序是发给后台一个String "0x81" 还是 int或者是char甚至是把它打散成byte[]?

高手看了个能会笑话这个问题,不过还望各位高人高抬贵手给各解释。

论坛徽章:
0
2 [报告]
发表于 2006-04-14 16:38 |只看该作者
byte[]

论坛徽章:
0
3 [报告]
发表于 2006-04-14 17:52 |只看该作者
是放在byte[]中的。

我在做类似的东西,java取出从后台C发过来的字符流,放入byte[]中,然后打印byte[]内容。后台C部分和前台的Java部分都是基于开源软件修改的。后台C部分为前台Java提供了两个部分的数据,一部分是开源的,一部分是后期修改的。在取后台C开源定义的数据时,打印byte[]内容会显示正常的字符,而在取后台C后期修改的数据时,打印byte[]内容显示16进制数值。我将这两种情况的byte[]值都打印了出来,和ASCII码比较都是完全相符合的(两种情况的byte[]值不同)。我新建了一个char[]数组,将byte[]内容拷贝到char[]中并打印,则显示正确的字符。我查了java对字符的定义,发现java定义的字符数据类型是16位的,放置Unicode符号而不是ASCII符号。请问这个问题到底定位在哪里,是java端还是c端?后台c使用同一代码对数据进行打包,而前台java显示的时候却是两种不同的情况。如果要在java前台解决这个问题,除了上面copy数组以外还有没有其他好的办法?

论坛徽章:
0
4 [报告]
发表于 2006-04-14 19:30 |只看该作者
原帖由 weishu76 于 2006-4-14 17:52 发表
是放在byte[]中的。

我在做类似的东西,java取出从后台C发过来的字符流,放入byte[]中,然后打印byte[]内容。后台C部分和前台的Java部分都是基于开源软件修改的。后台C部分为前台Java提供了两个部分的数据,一 ...



是说 client无法正确显示server发过来的信息么?new String(你的字节数组,编码) 试试吧,

论坛徽章:
0
5 [报告]
发表于 2006-04-14 21:07 |只看该作者
一般是

byte d =  129;

将 d  发出去

论坛徽章:
0
6 [报告]
发表于 2006-04-14 21:13 |只看该作者
原帖由 weishu76 于 2006-4-14 17:52 发表
是放在byte[]中的。

我在做类似的东西,java取出从后台C发过来的字符流,放入byte[]中,然后打印byte[]内容。后台C部分和前台的Java部分都是基于开源软件修改的。后台C部分为前台Java提供了两个部分的数据,一 ...




1 你转成 char ,再传输时还得去决于你是用什么编码取的 byte[]

2 取决于 c 那段是怎么处理读入的数据的

假如都是java 按 byte 传送 = 八位 = c 的一个char,是不会有问题的

论坛徽章:
0
7 [报告]
发表于 2006-04-17 20:58 |只看该作者

回复 4楼 艾斯尼勒 的帖子

client无法正确显示server发过来的信息,我用了你的方法new String(byte[], "US_ASCII"),结果和char[]一样,能够正确地显示信息了。请问这是不是可以定位到因为编码的原因造成后台C发开源部分产生的信息和后期开发部分产生的信息显示不同的吗?如果必须要改代码的话,那么改动哪一部分的代码比较省时间?后台C部分由我的同事负责,我不清楚后台C的架构。有劳艾斯尼勒了。

论坛徽章:
0
8 [报告]
发表于 2006-04-18 01:02 |只看该作者
原帖由 weishu76 于 2006-4-17 20:58 发表
client无法正确显示server发过来的信息,我用了你的方法new String(byte[], "US_ASCII"),结果和char[]一样,能够正确地显示信息了。请问这是不是可以定位到因为编码的原因造成后台C发开源部分产生的信 ...



我想应该是C是按ascII发送的,7位或者8位为一个char,而java默认是俺按照该平台的unicode码16位为一个char来组织字符.所以出现的乱码问题,那么new String的时候强制使用asc编码应该就可以解决的.

具体怎么解决,我到现在为止还是觉得这样的new String指定编码的解决方案比较方便了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP