Ich ging gerade durch einen der Java-Code, wo sie einen der Code für GetBigEndian Funktion für eine bestimmte Länge verwendet. Unten ist der Code, der für JAVA ist:Wie würde die Get Big Endian-Funktion in Objective C aussehen?
// 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;
}
Was diese Funktion sieht wie in Objective C wäre? Ich versuchte unter Lösungen, aber gab mir nicht die genaue Ausgabe, die oben genannte Funktion zurückkehrt.
// 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];
Der obige Code stürzte in der 2. Zeile ab. Keine hilfreich Protokolle :(
// 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;
}
Above Lösung ist aus: Convert Little Endian to Big Endian
auch durch Bit conversion tool in Objective-C gegangen Dies auch nicht helfen
mir jeden Hinweis oder eine Idee, wie Let zu konvertieren.. dieser Java-Code zu Objective-C-Code. Vielen Dank im Voraus.
Welches Problem versuchen Sie zu lösen? Hierfür stehen bereits verschiedene Funktionen zur Verfügung. Ist das nur eine Lernübung? – Avi
Was ist falsch an Lösung # 2? Es gibt auch 'CFSwapInt32HostToBig()' und 'htonl()', die denselben Zweck erfüllen. –
@MartinR Mit # 2 mindestens seit AND ist erste und Variable ist signiert das Zeichen wird in der letzten erweitert werden. Sollte zuerst verschoben werden UND zuletzt. In der ursprünglichen SO-Antwort sind die Variablen nicht signiert, so dass es funktioniert. –