日期:2014-05-20  浏览次数:20937 次

java端向c端转发数据 数据类型转换问题
小弟用java客户端向c服务器转发数据 有的数据类型不会转 Octet String(定长字符串),Unit16_t(16 位无符号整型),Unit32_t(32 位无符号整型) 这些怎么对应java里的数据类型 ,该怎么转 ,求帮助 ,最好有例子 ,谢谢

------解决方案--------------------
上面写得有些问题,改一下

String str="hkkpssy";
int x=0x10080001;
byte bt[]=new byte[8];
Arrays.fill(bt, (byte)0);
byte s[]=str.getBytes();
System.arraycopy(bt,0,s,0,s.length);
BufferedOutputStream out=new BufferedOutputStream(socket.getOutputStream());
out.write(bt,0,bt.length);
out.write(x);
out.flush();

------解决方案--------------------
C语言服务端接收数据并打印,考虑到C语言struct对齐问题,数据顺序是string, u_int32_t, u_int16_t,部分代码如下:
C/C++ code

void handle_req(int fd) {
    struct {
        char data_str[8];
        u_int32_t data_int32;
        u_int16_t data_int16;
    } data;
    
    if(readn_timeout(fd, (void *)&(data), sizeof(data), 30) < 0) {
        printf("readn_timeout() failed");
        return;
    }
    printf("Data_1:[%s], Data_2:[%d], Data_3:[%d]\n",
            data.data_str, data.data_int32, data.data_int16);

    return;
}