Chinaunix

标题: 16进制和String [打印本页]

作者: sparks    时间: 2006-04-14 16:11
标题: 16进制和String
正在做一个C/S结构的系统,前台用java,后台是c,前后台通过自定应的协议进行通讯。我先在不知道前台到底该法给后台什么都西?

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

高手看了个能会笑话这个问题,不过还望各位高人高抬贵手给各解释。
作者: ua    时间: 2006-04-14 16:38
byte[]
作者: weishu76    时间: 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数组以外还有没有其他好的办法?
作者: 艾斯尼勒    时间: 2006-04-14 19:30
原帖由 weishu76 于 2006-4-14 17:52 发表
是放在byte[]中的。

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



是说 client无法正确显示server发过来的信息么?new String(你的字节数组,编码) 试试吧,
作者: wobushiwo    时间: 2006-04-14 21:07
一般是

byte d =  129;

将 d  发出去
作者: wobushiwo    时间: 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,是不会有问题的
作者: weishu76    时间: 2006-04-17 20:58
标题: 回复 4楼 艾斯尼勒 的帖子
client无法正确显示server发过来的信息,我用了你的方法new String(byte[], "US_ASCII"),结果和char[]一样,能够正确地显示信息了。请问这是不是可以定位到因为编码的原因造成后台C发开源部分产生的信息和后期开发部分产生的信息显示不同的吗?如果必须要改代码的话,那么改动哪一部分的代码比较省时间?后台C部分由我的同事负责,我不清楚后台C的架构。有劳艾斯尼勒了。
作者: 艾斯尼勒    时间: 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指定编码的解决方案比较方便了.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2