将int转换为字节并有效地切换endian

jn_*_*pdx 3 c objective-c endianness

我必须做一些int - >字节转换并切换到big endian来处理我正在写的一些MIDI数据.现在,我这样做:

int tempo = 500000;
char* a = (char*)&tempo;

//reverse it
inverse(a, 3);

[myMutableData appendBytes:a length:3];
Run Code Online (Sandbox Code Playgroud)

和反函数:

void inverse(char inver_a[],int j)
{
    int i,temp;
    j--;
    for(i=0;i<(j/2);i++)
    {
      temp=inver_a[i];
      inver_a[i]=inver_a[j];
      inver_a[j]=temp;
       j--;
     }
}
Run Code Online (Sandbox Code Playgroud)

它有效,但它不是真正的干净,我不喜欢我必须指定3两个时间(因为我很高兴知道它将结束多少字节).

有没有更便捷的方式来接近这个?

Jer*_*myP 14

使用Core Foundation字节交换功能.

int32_t unswapped = 0x12345678;
int32_t swapped = CFSwapInt32HostToBig(unswapped);
char* a = (char*) &swapped;
[myMutableData appendBytes:a length:sizeof(int32_t)];
Run Code Online (Sandbox Code Playgroud)