首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Bridj和JNAerator在Java中使用指针地址

使用Bridj和JNAerator在Java中使用指针地址
EN

Stack Overflow用户
提问于 2015-01-29 09:02:50
回答 1查看 753关注 0票数 2

我用C语言编写了这段代码,我想用Java编写同样的代码:

代码语言:javascript
复制
static u_int32_t print_pkt (struct nfq_data *tb){
    unsigned char *data;
    ret = nfq_get_payload(tb, &data);
    if (ret >= 0)
        printf("payload_len=%d ", ret);
    printf("data: ");
    for(i=0;i<ret;i++){
        printf("%c",data[i]);
    }
    fputc('\n', stdout);
    return ret;
}

我使用JNAerator创建了JNAerator,它将使用Bridj (Mylib类)调用C nfq_get_payload:

代码语言:javascript
复制
public static int nfq_get_payload(Pointer<Netfilter_queueLibrary.nfq_data > nfad, Pointer<Pointer<Byte > > data) {
    return nfq_get_payload(Pointer.getPeer(nfad), Pointer.getPeer(data));
}
protected native static int nfq_get_payload(@Ptr long nfad, @Ptr long data);

我的“等效”Java代码是:

代码语言:javascript
复制
static int print_pkt (Pointer< nfq_data > tb)
{
    int ret;
    Pointer<Byte> data =null;
    ret = MyLib.nfq_get_payload(tb, Pointer.pointerToPointer(data));
    if (ret >= 0){
        System.out.println(String.format(" payload_len=%d ", ret));
        System.out.print("data: ");
        for(int i=0;i<ret;i++){
            System.out.print(data.get(i));
        }
    }
    System.out.println();

    return ret;
}

我应该指出,在使用c代码和java代码时,ret值是相同的,但是当我试图访问数据时,在使用NullPointerException时会引发一个(在C代码中,我得到了一些例外)。当我执行Pointer<Byte> data =Pointer.allocateBytes(4096);时,我会得到零而不是空指针异常,但是由于我没有在C代码中分配内存,所以我认为我不应该在Java代码中也分配内存。

谢谢您的时间和您的帮助欢呼

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-03 01:21:56

我最终找到了一个这样的修复方法,但仍然不知道为什么第一个方法不起作用:

代码语言:javascript
复制
val data2 = Pointer.pointerToPointer(data);
ret = Netfilter_queueLibrary.nfq_get_payload(tb, data2)
if (ret >= 0) {
  println(String.format(" payload_len=%d ", ret));
  println("data: ");
  for (i <- 0 until ret) {
    printf("%02x", (data2.get().getBytes(ret)(i)));
  }

希望它能帮到别人

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28210622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档