2012-04-20 79 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

相关问题