我有一个C代码,其中包含以下行。
ipj_set_value(&iri_device,E_IPJ_KEY_REPORT_CONTROL_TAG,E_IPJ_TAG_FLAG_BIT_EPC | E_IPJ_TAG_FLAG_BIT_TID |E_IPJ_TAG_FLAG_BIT_TIMESTAMP | E_IPJ_TAG_FLAG_BIT_CHANNEL);
我使用JNA从Java调用此set value方法。我如何在Java中做同样的事情?那就是我想用“|”传递很多整数标志。这在“或”中起作用。下面是方法定义和我上面使用的变量。
ipj_error ipj_set_value(
ipj_iri_device *iri_device, /**< [in] IRI device data structure */
ipj_key key, /**< [in] Key code to set*/
uint32_t value) /**< [in] Value to set */
{
return ipj_set(iri_device, key, 0, 0, value);
}
#define E_IPJ_TAG_FLAG_BIT_EPC ((ipj_tag_flag)(0x1))
#define E_IPJ_TAG_FLAG_BIT_TID ((ipj_tag_flag)(0x2))
#define E_IPJ_TAG_FLAG_BIT_TIMESTAMP ((ipj_tag_flag)(0x20))
#define E_IPJ_TAG_FLAG_BIT_CHANNEL ((ipj_tag_flag)(0x100))
答案 0 :(得分:2)
即使你已经接受了答案。我认为值得纠正它。
|
是逻辑OR
运算符。值未添加。它将执行按位 OR
操作(请参阅:Wikipedia)。
一个小示例代码段。
static final int E_IPJ_TAG_FLAG_BIT_EPC = 1;
static final int E_IPJ_TAG_FLAG_BIT_TID = 2;
public static void main(String[] args) throws Exception {
StringBuilder sb = new StringBuilder("00000000");
sb.append(Integer.toBinaryString(E_IPJ_TAG_FLAG_BIT_EPC));
System.out.println("E_IPJ_TAG_FLAG_BIT_EPC: " + sb.substring(sb.length()-8));
sb.delete(8, sb.length());
sb.append(Integer.toBinaryString(E_IPJ_TAG_FLAG_BIT_TID));
System.out.println("E_IPJ_TAG_FLAG_BIT_TID: " + sb.substring(sb.length()-8));
int orEd = E_IPJ_TAG_FLAG_BIT_EPC | E_IPJ_TAG_FLAG_BIT_TID;
sb.delete(8, sb.length());
sb.append(Integer.toBinaryString(orEd));
System.out.println("bitwise OR : " + sb.substring(sb.length()-8));
}
输出
E_IPJ_TAG_FLAG_BIT_EPC: 00000001
E_IPJ_TAG_FLAG_BIT_TID: 00000010
bitwise OR : 00000011
如果|
意味着要添加值,则E_IPJ_TAG_FLAG_BIT_EPC | E_IPJ_TAG_FLAG_BIT_EPC
将为00000010
。由于它是按位OR,结果仍为00000001
。
答案 1 :(得分:1)
Java有一个按位或运算符,就像C:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
一样您应该能够像在C中一样对其进行编码。
答案 2 :(得分:-1)
当你使用两个整数和&#34; |&#34;你实际上是在添加它们。因此,获取字符串拆分并执行添加并传递添加的值