2012-04-20 16 views
1

OSC Specification, version 1.0指定「int32」數據類型爲「32位大端二進制補碼整數」。這意味着它已經簽名(否則,爲什麼你會寫「二補」......),但它並沒有馬上出來說出來。int32s在OSC中是有符號還是無符號(或未指定?)

這在blob的編碼中最清楚地表達出來:長度爲#x90000000的blob是否合法?該數字可以編碼爲無符號的32位整數,但不能作爲有符號的32位整數編碼。我授予你,這是一個非常大的blob(超過2千兆字節)。

回答

1

該規範給你沒有更多的細節。我檢查了C++ OSC實現我使用的代碼,它的定義爲:

typedef signed long int32; 

的斑被定義爲:

struct Blob{ 
    Blob() {} 
    explicit Blob(const void* data_, unsigned long size_) 
      : data(data_), size(size_) {} 
    const void* data; 
    unsigned long size; 
}; 

所以,是的,它簽署了「原子」的Int32整數類型。

另一方面,blob將其大小存儲爲無符號long。所以它可能會更大。您可能必須先嚐試一下,因爲我只在這裏實現了osc pack。

+0

去執行 - >是的,它沒有指定:) – 2012-05-16 15:54:26

+0

我不記得在哪裏,但在一個OSC的C/C++庫的代碼中,我發現他們使用「我」簽署了32位ints,「u」表示未簽名的32位整數。 – hoijui 2014-05-26 09:35:50