2011-08-23 64 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?

相关问题