[英]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.