我要用UDP向服务器传送数据,, 具体传送数据包括以下, 它只是给了一个关于C的数据类型PACKED struct Packet {
 byte quest;  // 第一个字节
 uint64 time: 
 uint32 lon;
 uint32  lat;
 uint32 imsi_len;
 char imsi[15]}
 
以上是给的数据类型,要求必须严格按照相关类型所占的字节数据来传递
  我现在假设有如下数据;   String imsi="123456789123456"
   quest  =  0x21
    time= 123456
    lon =   456.5
    lat=     45.6
    imsi_len= 15
    imsi[15] =imsi
我的java代码如下写
                        byte first = 0x21;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeByte(first);// 添加第一个字节 (文件类别) oos.writeLong(_location.getTime()); 
oos.writeInt((int) (lon )); 
oos.writeInt((int) (lat)); oos.writeInt(IMSI.length()); // IMSI的长度String 460030900191125 oos.writeChars(IMSI);// chars oos.close(); byte[] t = baos.toByteArray();高手帮忙看一下,那儿不对啊? 帮忙看一下。

解决方案 »

  1.   

    PACKED struct Packet {
     byte quest; // 第一个字节
     uint64 time: 
     uint32 lon;
     uint32 lat;
     uint32 imsi_len;
     char imsi[15]}主要是这里的  char imsi[15]    这里C语言中的定义如果我在java中得到的值为  String imsi="123456789123456";
    用ObjectOutputStream dos=new ObjectOutputStream()的话,怎么把这个 imsi  写入到输出流中    才可以和C语言中的相对应上?dos.write(imsi.getBytes())   ? dos.writeChars(imsi)     ? 这两种写法都不对,那该怎么写?  谢谢!