2011-08-23 78 views
1

我試圖通過WiFi發送十六進制數據。發送十六進制數據到設備(將NSString轉換爲十六進制數據)

的代碼是這樣的:

NSString *abc = @"0x1b 0x50"; 
NSData *data = [[[NSData alloc] initWithData:[abc dataUsingEncoding:NSASCIIStringEncoding]]autorelease]; 
[outputStream write:[data bytes] maxLength:[data length]]]; 

發送十六進制數據相反的,它在發送的文本格式。 我試過NSUTF8StringEncoding,但它是一樣的。我在NSStream課上使用它。

回答

0

您可能要發送的數據只是0x1b50,它是十進制數6992(假設爲big-endian),並且適合兩個字節。這與字符串(可能包含任何內容)不同,即使它恰好包含這些數字的一些人類可讀表示。

我假設你想發送這個二進制數據,如果是的話,一種方法是簡單地發送由一個UInt16,而不是一個字符串形成的緩衝區。我不是很熟悉相關的API,但看看如果你可以用一個整數填充NSData的,也許是這樣的:

UInt16 i = 0x1b50; // Or = 6992 
[[NSData alloc] initWithBytes: &i length: sizeof(i)] 

[outputStream write: [data bytes] maxLength: [data length]]]; 

同樣,我不流利使用Objective C,但是這應該是將數字0x1b50作爲二進制數據發送的一般方法。

+0

嘿,夥計們。非常感謝。它的工作現在。 但我仍然需要學習如何解析二進制數據的數組。 – user774150

2

您沒有得到您期望的NSString *abc = @"0x1b 0x50"。它幾乎與NSString *abc = @"cat dog 123 0x0x0x"相同;只是一堆由空格分隔的單詞。所以當你創建你的NSData對象時,你只是用一串字符來初始化它,而不是一系列實際的數字。

如果你能得到你的號碼變成NSArray,這個提問/回答可以幫助你:How to convert NSArray to NSData?