私はちょうど彼らが与えられた長さのためのgetBigEndian関数のコードの1つを使用していたJavaコードの1つを通過していました。以下は、JAVAのためのコードは次のとおりです。Get Big Endian関数はObjective Cのようになりますか?
// JAVA
public static byte[] getBigEndian32(int length) {
byte[] res = new byte[4];
res[0] = (byte) (length >>> 24);
res[1] = (byte) ((length >>> 16) & 0xFF);
res[2] = (byte) ((length >>> 8) & 0xFF);
res[3] = (byte) (length & 0xFF);
return res;
}
この機能だろう何のObjective C中のように見えますか?私はソリューションの下で試してみましたが、上記の関数が返す正確な出力を私に与えていませんでした。
// Tried Solution 1:
NSMutableData *data = [NSMutableData data];
[data appendBytes:(const void *)(length >> 24) length:4];
[data appendBytes:(const void *)(length >> 16 & 0xFF) length:4];
[data appendBytes:(const void *)(length >> 8 & 0xFF) length:4];
[data appendBytes:(const void *)(length & 0xFF) length:4];
上記のコードは2行目でクラッシュしていました。いいえ役立つログません:(
// Tried Solution 2:
int convert(int num)
{
int b0,b1,b2,b3;
b0= (num & 0x000000FF)>>0;
b1= (num & 0x0000FF00)>>8;
b2= (num & 0x00FF0000)>>16;
b3= (num & 0xFF000000)>>24;
num= (b0<<24) | (b1<<16) | (b2<<8) | (b3<<0) ;
return num;
}
ソリューション上からです。 もBit conversion tool in Objective-C経Convert Little Endian to Big Endian
これも助けにはならなかった
を私に変換する方法上の任意のヒントやアイデアを持ってみましょう。このJavaコードをObjective Cコードに変換してください。
あなたはどのような問題を解決しようとしていますか?これにはすでにさまざまな機能があります。これはちょうど学習の練習ですか? – Avi
解決策2について何が間違っていますか?同様の目的を果たす 'CFSwapInt32HostToBig()'と 'htonl()'もあります。 –
@MartinR少なくともANDが最初で変数が符号付きであるので少なくとも#2は符号が最後のものに拡張されます。最初にシフトし、最後にする必要があります。元のSO答えでは、変数は無署名なので、正常に動作します。 –