[英]How to get a unique value in Java that corresponds to uint32_t?
我必须在 Java 中生成一个唯一编号(对于运行代码的机器),以便在 C++ 中它可以对应于uint32_t
。 一般来说,其他 C++ 程序应该能够正确读取这个唯一编号,如uint32_t
。 我在一个字节数组中发送这个信息,其他 C++ 程序正在反序列化它以获得这个数字。 到目前为止,我无法在 C++ 程序中更改此数字的数据类型。
private static final AtomicInteger clientId = new AtomicInteger(0);
// will be called many time when the program is running after initialization
public static int getClientId() {
int counter = clientId.incrementAndGet();
return counter == Integer.MAX_VALUE ? 0 : counter;
}
// called only once at startup
public static void setClientId(final int counter) {
clientId.addAndGet(counter == Integer.MAX_VALUE ? 0 : counter);
}
所以我想出了上面的代码。 我的setClientId
方法在应用程序启动(初始化阶段)期间只会被调用一次:
0
传递给setClientId
方法。setClientId
方法的值。 然后当我的程序运行时(初始化后)它会继续调用getClientId
方法来给我实际唯一的 clientId。
这是为我的机器生成唯一 id 的正确方法,对于 C++ 程序来说,它是uint32_t
吗? 我还确保如果该值达到Integer.MAX_VALUE
则将其设置为 0 并重新开始。 我必须这样做吗? 或者我也可以为这个uint32_t
取负值?
基本上,我想为我的机器生成一个唯一的编号,该编号应始终对应uint32_t
。 如果机器是一台新机器,我们可以从数字 0 开始(bcoz,当我们查找这台机器的值时,db,不会有任何值,所以我们将从 0 开始)但如果机器之前已经运行过这段代码,然后从数据库中最后保存的值开始。
我必须这样做吗? 或者我也可以为这个 uint32_t 取负值?
不,您不必这样做,您也可以采用负值。 如果您将 Java 整数逐位传递给 C++,则 C++ 中的 unit32_t 将继续增加,即使 Java 变量超过最大值并变为负数。 这是 2 的补码有符号整数的好处,Java 用它来表示整数值。
这是一个 4 位示例,说明了正在发生的事情:
Bits Unsigned Signed
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 -8
1001 9 -7
1010 10 -6
1011 11 -5
1100 12 -4
1101 13 -3
1110 14 -2
1111 15 -1
另请参阅此答案: 当您将整数增加到超出其最大值时会发生什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.