मैं एक शब्दकोश इतनी तरह प्रारंभ मिल गया है करने के लिए एक पूर्णांक परिवर्तित ...ऑब्जेक्टिव-सी एक हेक्स मान
keyDictionary = [[NSDictionary dictionaryWithObjects:values forKeys:keys]retain];
जहां keys
वर्णमाला और अन्य पात्रों और values
के NSArray
है unsigned char
के NSArray
है एस, जो उन पात्रों के लिए यूएसबी हेक्स कीकोड हैं।
यूएसबी कुंजी कोड हेक्स मान हैं जो 0x04 से 0xE7 तक हैं। मैं कुंजीपटल पर कौन सी कुंजी दबाया जाता है, इस पर निर्भर करता हूं कि मैं इन दोनों के बीच एक नक्शा बनाने की कोशिश कर रहा हूं।
values
सरणी इसलिए की तरह बनाई गई है ...
NSArray *values = [NSArray arrayWithObjects:
[NSNumber numberWithUnsignedChar:0x04]/*A*/,
[NSNumber numberWithUnsignedChar:0x05]/*B*/, /*ETC*/];
तो आदर्श जब मैं इस कोड को चलाने ... जहां character == @"I"
- (uint8) getUSBCode:(NSString *)character
{
NSNumber *val = [keyDictionary objectForKey:character];
return (uint8)[val unsignedCharValue];
}
मैं उम्मीद करेंगे वापस 0x0C
प्राप्त करने के लिए है, लेकिन मुझे एक इंट के रूप में 12 वापस मिल रहा है (जो मैंने इसके बारे में सोचा, समझ में आता है)। मुझे हेक्स वैल्यू संरक्षित की जरूरत है। मुझे स्ट्रिंग मान की आवश्यकता नहीं है। मुझे हेक्स वैल्यू में सीधे रूपांतरण की आवश्यकता है या
uint8
स्टोर करने का एक बेहतर तरीका केवल एक टाइपिफ़ाइड हस्ताक्षरित char है।
संपादित करें जब मैंने इसे पहले पोस्ट किया था तो मुझे स्पष्ट नहीं था। मुझे वही चाहिए जो मुझे चाहिए।
मुझे इन कोडों के हेक्स मान की आवश्यकता है क्योंकि उन्हें आंतरिक कंपनी नेटवर्क पर भेजा जा रहा है। इसके अलावा, दबाए गए कुंजी का मूल्य बड़े एंडियन (या थोड़ा, यह अभी से मुझे बच रहा है) से दूसरे में परिवर्तित किया जा रहा है, फिर एक आंतरिक नेटवर्क पर प्रसारित किया जा रहा है। मैं समझता हूं कि ये मान बाइनरी में संग्रहीत हैं, लेकिन मुझे उन्हें हेक्स में प्रेषित करने की आवश्यकता है।
इसके अलावा, मैंने कहा कि मुझे समारोह से 12 वापस मिल रहा था। मैं डीबगर से 12 पढ़ रहा था, वास्तव में मूल्य नहीं प्राप्त कर रहा था। यही कारण है कि मैं उलझन में था।
12 दशमलव और 0x0C समान संख्या हैं। आप वापसी मूल्य को 0x0C के साथ तुलना करने का प्रयास कर सकते हैं और देख सकते हैं कि वे समान हैं या नहीं।यानी 'अगर (retval == 0x0c) NSLog (@" वे वही हैं "); अन्य एनएसएलओजी (@ "वे वही नहीं हैं"); यूएसबी सीरियल पाइप को पारित करने वाली बिट्स दशमलव 12 या हेक्स सी के साथ समान होंगी ... 00001100 –
आप सभी तकनीकी रूप से सही हैं। जब मैंने यह पूछा तो मैं कुल मूर्खतापूर्ण था। किसी कारण से मैंने माना कि मुझे हेक्स के रूप में कोड भेजना है, लेकिन अंत में, हम अनिवार्य रूप से बाइनरी भेज रहे हैं। – DavidAndroidDev