2009-12-10 15 views
9

मुझे कुछ मूल्यों की अंतहीनता को स्वैप करने की आवश्यकता है और केवल आश्चर्य हुआ कि क्या उद्देश्य-सी में कुछ भी उपलब्ध था, वर्तमान में मैं नीचे सीएसटीएल फ़ंक्शन के साथ बाइट्स को स्वैप कर रहा हूं (जो स्पष्ट रूप से मैं पुन: उपयोग कर सकता हूं) मैं बस जांचना चाहता था कि वहां कुछ भी नहीं था विशिष्ट मैं याद कर रहा था?उद्देश्य-सी में एंडियननेस स्वैपिंग?

float floatFlip(float inFloat) { 
    union { 
     int intValue; 
     float newFloat; 
    } inData, outData; 

    inData.newFloat = inFloat; 
    outData.intValue = CFSwapInt32BigToHost(inData.intValue); 
    return(outData.newFloat); 
} 

EDIT_001

संकेत यहाँ के लिए धन्यवाद मैं पूर्णांकों लिया है, क्या एक नाव स्वैप करने के लिए सबसे आसान तरीका है?

int myInteger = CFSwapInt32BigToHost(myInteger); 

(अद्यतन ऊपर कोड)

float myFloat = floatFlip(myFloat); 

गैरी

+0

फ्लोटफ्लिप() ठीक दिखता है। मैं (व्यक्तिगत रूप से) फ़ंक्शन नाम और तर्कों को बोर्ड भर में निश्चित चौड़ाई के लिए लिखूंगा 'Float32 Float32Flip (Float32 inFloat) {संघ {SInt32 intValue; Float32 newFloat; } में डेटा, आउटडेटा; ...} ', लेकिन मैं अजीब हूँ। यदि आप सी ++ का उपयोग कर रहे हैं, तो मैं संदर्भ (पास करने के लिए कंपाइलर के लिए बाइट गिनती की जांच करता हूं) के लिए पास करता हूं, या (सी/ओबीजेसी) एक पॉइंटर पास करता है क्योंकि आप मुख्य रूप से तर्क के बाइट स्वैप में रूचि रखते हैं संभावित रूप से रूपांतरित/छंटनी/पुन: परिभाषित मूल्य का एक बाइट स्वैप। – justin

उत्तर

10

साथ ही साथ पहले से उल्लिखित एपीआई, कोरफाउंडेशन/CFByteOrder.h है।

5

आप (या OSSwapInt16(), OSSwapInt64() आदि) OSSwapInt32() की तलाश कर रहे है। OSByteOrder.h देखें।

यह भी ध्यान दें कि ये गैर-पोर्टेबल हैं। यदि आप केवल बड़े-एंडियन में परिवर्तित हो रहे हैं तो आप htonl() जैसे कुछ का उपयोग करने पर विचार करना चाहेंगे, जो मानक लाइब्रेरी <arpa/inet.h> में शामिल है। (दुर्भाग्यवश, हालांकि, बैक-एंड-आउट को बस स्वैप करने के लिए कोई मानक लाइब्रेरी नहीं है।)

संबंधित मुद्दे