int32s是在OSC中签名还是未签名(或未指定?)

时间:2012-04-20 17:26:01

标签: osc

OSC Specification, version 1.0将“int32”数据类型指定为“32位大端二进制补码整数”。这意味着它已签名(否则,为什么你会写“二补”......),但它并没有说出来。

这在blob的编码中最为明显:拥有一个长度为#x90000000的blob是否合法?此数字可以编码为无符号32位整数,但不能编码为带符号的32位整数。我授予你,这是一个非常大的blob(超过2千兆字节)。

1 个答案:

答案 0 :(得分:1)

规范不再为您提供详细信息。我检查了我使用的C ++ osc实现的代码,它被定义为:

typedef signed long int32;

blob定义为:

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

是的,它是" atomic"的有符号整数。 int32类型。

另一方面,blob的大小存储为unsigned long。所以它可能更大。您可能必须先尝试一下,因为我这里只有osc包的实现。