我正在尝试通过WiFi发送十六进制数据。
代码是这样的:
NSString *abc = @"0x1b 0x50";
NSData *data = [[[NSData alloc] initWithData:[abc dataUsingEncoding:NSASCIIStringEncoding]]autorelease];
[outputStream write:[data bytes] maxLength:[data length]]];
它不是发送十六进制数据,而是以文本格式发送。
我尝试了NSUTF8StringEncoding
,但它是一样的。我正在使用NSStream
类。
答案 0 :(得分:2)
你没有得到NSString *abc = @"0x1b 0x50"
的期望。它与NSString *abc = @"cat dog 123 0x0x0x"
几乎相同;只是一堆由空格分隔的单词。因此,当您创建NSData
对象时,您只是使用一串字符初始化它,而不是一系列实际数字。
如果您可以将您的号码加到NSArray
,这个问题/答案可以帮助您:How to convert NSArray to NSData?
答案 1 :(得分: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作为二进制数据发送的一般方法。