1

OSC 仕様、バージョン 1.0では、「int32」データ型を「32 ビット ビッグ エンディアンの 2 の補数整数」と指定しています。これは、署名されていることを意味します (そうでなければ、なぜ「2 の補数」と書くのでしょうか...) が、すぐに出てきてそれを言うことはありません。

これは、ブロブのエンコーディングで最も明確に現れます: 長さ #x90000000 のブロブを持つことは合法でしょうか? この数値は、符号なし 32 ビット整数としてエンコードできますが、符号付き 32 ビット整数としてエンコードすることはできません。確かに、これは非常に大きなブロブ (2 ギガバイト以上) です。

4

1 に答える 1

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タイプの符号付き整数です。

一方、ブロブのサイズは unsigned long として保存されます。だから多分もっと大きくなる。ここには osc pack の実装しかないので、最初に試してみる必要があるかもしれません。

于 2012-05-15T06:49:39.753 に答える