不知道这个问题能否这么问,java默认的char型变量是两个字节,能不能让他只占一个字节?是跟unicode编码有关系吗?如何改变呢?
String的一个字符能不能也只占一个字节?
很郁闷,希望各位大侠帮忙如果不能改,delphi下的byte数组在java里怎么表示?
谢谢

解决方案 »

  1.   

    可惜不能。但是因为char占两个字节,你放一个字节进去也没问题。
    byte[]?
      

  2.   

    但是挨个读取的时候就有问题了
    因为这个是要从java程序传到delphi程序中处理,所以好像不能直接用char上面写错了,是delphi中的char[]在java中怎么表示我也想byte[]来着
      

  3.   

    delphi和java能直接通信吗?delphi和c可以吗,如果可以先用javah把class转成c,然后调用
      

  4.   

    要通过一种技术,叫JNA的,楼上说的是JNI,也可以的
    我现在就是数据类型不知道怎么统一啊
    delphi的string一个字符一个字节,java的string要占两个字节,不知道怎么传递参数了呢
      

  5.   

    答:为何有此一问?到底你想要做什么?是想接收delphi下的byte数组吗?若是这个目的,则与char无关,你直接在JAVA中用byte[]就行了。然后再将这个byte[]通过new String(byte[],charset)转换成真正的字符串就行了。
    因此:要告之,你的真正目的是什么。
      

  6.   

    感谢楼上,我是在用JNA,需要向DLL传递参数,需要的参数类型时pchar,不知道JAVA中,该用什么
    似乎delphi和java的编码不一样,所以读取字符的时候有区别,请问该怎么办呢?
      

  7.   

    delphi 的bye对应java的char
    delphi的byte[]等同于java的char[]
      

  8.   

    答:我猜想的是:楼主的DELPHI DLL 是需要一个PChar的数组作为参数的,问:JAVA中如何向它传递参数?
    我的想法是:用JNA时不能用JAVA中的byte[],楼主要使用JNA中的ByteByReference[]即ByteByReference数组来传递。
    以上供楼主参考。
      

  9.   

    还不是pchar数组,就是pchar变量
    动态链接库源码用C++写的,头文件:
    int DUABind(struct UserInfo *puserinfo,
    char *dsaip_address,
    int port_no,
    SOCKET *psock,
    int bindseconds)delphi调用该dll时的接口描述:
    function   DUABind(puserinfo     : PUserInfo;
                       dsaip_address : pchar;
                       port_no       : integer;
                       var psock     : TSocket;
                       bindseconds   : integer
                       ):integer;cdecl;external CLIENT_DLLNAME name 'DUABind';
    使用JNA时该如何写接口?
    我这样写的,
        int DUABind(TUserInfo.ByReference  puserinfo,
                    byte[]                 dsaip_address ,
                    int                    port_no,
                    Socket                 psock,
                    int                    bindseconds);其中TUserInfo定义如下
    public class TUserInfo extends Structure implements Invariable{
        public static class ByReference extends TUserInfo implements Structure.ByReference{}
        public static class ByValue extends TUserInfo implements Structure.ByValue{}    public byte[] Name = new byte[20];      //登录名
        public byte[] Password = new byte[20];  //登录密码
    }不能出现预计结果,但是没有报错,请帮忙看一下吧,谢谢
      

  10.   

    答:一个PChar,用ByteByReference。
      

  11.   

    答:ByteByReference传入参数值,楼主会使用否?
    用法是:
    ByteByReference mybbr = new ByteByReference();
    Memory mymem = new Memory(20);//20个c字符
    mymem.setString(0, "myip");
    mybbr.setPointer(mymem.getPointer(0));
      

  12.   

    jiangnaisong 太感谢你了,我查了半天了不会用呢,谢谢谢谢谢谢!改下试试