Muszę zamienić endianizm niektórych wartości i zastanawiałem się, czy było coś dostępnego w Objective-C, obecnie zamieniam bajty z funkcją CStyle poniżej (co oczywiście mogę ponownie wykorzystać) Po prostu chciałem sprawdzić, czy nie było nic konkretna, której mi brakowało?Zamiana endianness w Objective-C?
float floatFlip(float inFloat) {
union {
int intValue;
float newFloat;
} inData, outData;
inData.newFloat = inFloat;
outData.intValue = CFSwapInt32BigToHost(inData.intValue);
return(outData.newFloat);
}
EDIT_001
Dzięki tutejszych wskazówek mam całkowitymi sortowane, co jest najprostszym sposobem, aby zamienić pływaka?
int myInteger = CFSwapInt32BigToHost(myInteger);
(kod powyżej aktualizowany)
float myFloat = floatFlip(myFloat);
gary
floatFlip() wygląda dobrze. Chciałbym (osobiście) napisać nazwę funkcji i argumenty, które mają być ustalone na całej szerokości 'Float32 Float32Flip (Float32 inFloat) {union {SInt32 intValue; Float32 newFloat; } inData, outData; ...} ', ale jestem dziwny. Jeśli używasz C++, przechodzę przez referencję (dla kompilatora do sprawdzenia poprawności liczby bajtów dla ciebie), lub (C/objc) przekazuję wskaźnik, ponieważ jesteś przede wszystkim zainteresowany zamianą bajtów argumentu, zamiast zamiana bajtów potencjalnie skonwertowanej/skróconej/reinterpretowanej wartości. – justin