gpt4 book ai didi

java - 无符号类型的 BridJ 类型映射

转载 作者:行者123 更新时间:2023-11-30 08:56:29 26 4
gpt4 key购买 nike

当使用 JNAerator 生成 BridJ 代码时,它将无符号类型(例如 Windows 的 ULONG)映射到普通的 Java long:

// c code
typedef struct _S {
USHORT a;
ULONG b;
ULONG64 c;
} S;


// generated java code
class S extends StructObject {

@Field(0)
public short a() {
return this.io.getShortField(this, 0);
}

@Field(0)
S setA(short a) {
this.io.setShortField(this, 0, a);
return this;
}

@CLong
@Field(1)
public long b() {
return this.io.getCLongField(this, 2);
}

@CLong
@Field(1)
S setB(long b) {
this.io.setCLongField(this, 2, b);
return this;
}

// ULONG64 is ignored and not generated at all

但是,Java 类型是已签名,而不是未签名。如果我需要手动更正,我需要使用哪些类型?像这样的字节数组?

@Field(0)
public byte[] a() { ... };

@Field(0)
public byte[] setA(byte[] a) { // check correct length };

最佳答案

有符号和无符号类型具有相同的大小,只是语义不同。您绝对应该使用 JNAerator 选择的类型,并使用处理无符号类型的 Java 原语,例如 the ones introduced in Java 8 (例如,Integer.divideUnsigned)。

如果 Java 8 不适合您,您可以直接 use casts and manipulate bits wisely .

关于java - 无符号类型的 BridJ 类型映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28581703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com