conryyy:
配列は、そのようなものになりますので、私は、入力パラメータとしてuint8_t配列を必要とする私のDLL内のC ++の機能を持っています。
uint8_t input[input_length] = { 0x30, 0x41, 0x80, 0x8A...};
私はJavaでuint8_t配列をレコード生成しなければならないことを意味JNAとJavaでこの機能を使用したいです。私の最初のアプローチは、のようなバイト配列を作成することでした。
byte[] input = { 0x30, 0x41, 0x80, 0x8A...};
しかし、私はC ++でuint8_t変数は、0から255までの範囲を持っているが、Javaのバイトの変数が-128..127の範囲を持っており、あなたが見ることができるように、この配列のような(127を超えている値が含まれていることに気づきましたここに私のJavaの宣言を意味0x8A)は、有効ではありません。だから私の質問は、uint8_tと等価であるJavaでどのようなタイプですか?
rustyx:
Javaは符号なしの型を持っていません。しかし、それはJavaで署名オーバーフローが2の補数として定義されているので、あなただけ渡すことができ、大きな問題ではないのですbyte
JNAが期待する場所にuint8_t
。それはで動作する唯一のビット不便です:
byte[] input = { 0x30, 0x41, (byte)0x80, (byte)0x8A...};
読むにuint8_t
戻って、あなたは何だろう(x & 0xFF)
として、結果を符号拡張と仕事をストリップしますint
。