传递带“|”的整数使用java的标志

时间:2016-01-27 06:14:43

标签: java methods parameters int jna

我有一个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))

3 个答案:

答案 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;你实际上是在添加它们。因此,获取字符串拆分并执行添加并传递添加的值