OSC 规范 1.0 版将“int32”数据类型指定为“32 位大端二进制补码整数”。这意味着它已签名(否则,您为什么要写“二进制补码”......),但它并没有直接说出来。
这在 blob 的编码中最为明显:拥有长度为 #x90000000 的 blob 是否合法?此数字可以编码为无符号 32 位整数,但不能编码为有符号 32 位整数。我承认,这是一个非常大的 blob(超过 2 GB)。
OSC 规范 1.0 版将“int32”数据类型指定为“32 位大端二进制补码整数”。这意味着它已签名(否则,您为什么要写“二进制补码”......),但它并没有直接说出来。
这在 blob 的编码中最为明显:拥有长度为 #x90000000 的 blob 是否合法?此数字可以编码为无符号 32 位整数,但不能编码为有符号 32 位整数。我承认,这是一个非常大的 blob(超过 2 GB)。
该规范没有为您提供更多详细信息。我检查了我使用的 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;
};
所以是的,它是“原子”int32 类型的有符号整数。
另一方面,blob 的大小存储为 unsigned long。所以可能它可以更大。你可能要先尝试一下,因为我这里只有osc pack的实现。