2012-05-16 11 views
9

में बाइट सरणी कनवर्ट करें मैं विभिन्न आईओएस ऐप के लिए विभिन्न ऑटो-नवीकरणीय सदस्यता के लिए इन-ऐप क्रय को कार्यान्वित कर रहा हूं। जब भुगतान पूरा हो जाता है तो हमें जानकारी रिकॉर्ड करने के लिए लेनदेन की जानकारी हमारे सर्वर (क्लाउड) को भेजने की आवश्यकता होती है ताकि हम सुनिश्चित कर सकें कि सदस्यता वैध है, रद्द नहीं किया गया/धनवापसी या नवीनीकृत नहीं है, ताकि हम सेट अंतराल पर रसीद को सत्यापित कर सकें। हम इन-ऐप क्रय गाइड और हमारे साझा रहस्य के माध्यम से ऐसा करने के लिए सेट अंतराल पर सर्वर से जेएसओएन कॉल करने जा रहे हैं, अभी तक इसे प्राप्त नहीं किया है, लेकिन इससे पहले कि हम खरीद से प्रासंगिक डेटा प्राप्त करने की आवश्यकता है , यानी लेनदेन रसीद जो एक एनएसडीटा वस्तु है।एनएसडीटा को बेस 64encoded में परिवर्तित करें और सी #

हम लेनदेन रसीद के लिए हमारी वेब सेवा में दो पैरामीटर भेजना चाहते हैं (उत्पाद आईडी खरीदे गए अन्य सामानों के साथ)। हम इसे बेस 64encoded मान के रूप में भेजना चाहते हैं जो हमें विश्वास है कि JSON अनुरोध में सत्यापन के लिए भेजा जाना चाहिए, इसलिए हम इसे SQL सर्वर में संग्रहीत करेंगे।

HOW, मोनो टच/सी # का उपयोग करके हम एनएसडीटा "लेनदेन रसीद" को बेस 64encoded और एक बाइट [] में परिवर्तित कर सकते हैं?

धन्यवाद।

उत्तर

6

वहाँ दो आसान तरीका NSData से बाहर डेटा प्राप्त करने के लिए, एक Stream या Bytes और Length गुणों का उपयोग करते है। धारा संस्करण लगेगा जैसे:

public byte[] ToByte (NSData data) 
{ 
    MemoryStream ms = new MemoryStream(); 
    data.AsStream().CopyTo (ms); 
    return ms.ToArray(); 
} 

Bytes और Length संस्करण होगा:

public byte[] ToByte (NSData data) 
{ 
    byte[] result = new byte[data.Length]; 
    Marshal.Copy (data.Bytes, result, 0, (int) data.Length); 
    return result; 
} 

बेस 64 उत्पादन स्ट्रिंग हो रही समान रहता है:

public string ToBase64String (NSData data) 
{ 
    return Convert.ToBase64String (ToByte (data)); 
} 
+0

मुझे शीर्ष ToByte विधि का उपयोग करने का प्रयास करते समय यह त्रुटि मिली: // संदेश: एनएसएमयूटेबलडेटा के लिए रैपर समर्थित नहीं है, नए अप्रबंधित मेमरीस्ट्रीम ((बाइट *) mutableData.Bytes, mutableData.Length) को कॉल करें // अपवाद: रैपर NSMutableData के लिए समर्थित नहीं है, नए UnmanagedMemoryStream ((बाइट *) mutableData.Bytes, mutableData.Length) को कॉल करें :: :: MonoTouch.Foundation.NSData.AsStream() [0x0002f] में/डेवलपर/मोनो टच/स्रोत/मोनोटच/src /shared/Foundation/NSData.cs:144 – Neal

+0

प्रत्येक 'NSData' उत्परिवर्तनीय नहीं है और 'AsStream' इसके लिए जांच करेगा, देखें: https://github.com/mono/maccore/blob/master/src/Foundation/NSData .cs # L136 आप सुझाए गए कोड का प्रयास कर सकते हैं (यानी 'UnmanagedMemoryStream') या 'ToByte' I का दूसरा संस्करण प्रदान किया गया है (जो' मार्शल 'का उपयोग करता है और डेटा की प्रतिलिपि बनाता है)। – poupou

0

वह बहुत काम करता है:

string yourDataInBase64 = Convert.ToBase64String(yourData.ToArray());