1

I'm trying to send hexadecimal data via WiFi.

The code is something like this:

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

Instead of sending the hexadecimal data, it's sending it in text format. I tried with NSUTF8StringEncoding, but it's the same. I'm using it with the NSStream class.

jscs
  • 63,694
  • 13
  • 151
  • 195
user774150
  • 962
  • 2
  • 10
  • 24

2 Answers2

2

You're not getting what you expect with NSString *abc = @"0x1b 0x50". It's almost the same as having NSString *abc = @"cat dog 123 0x0x0x"; just a bunch of words separated by spaces. So when you create your NSData object, you're just initializing it with a string of characters, not a series of actual numbers.

If you can get your numbers into an NSArray, this question/answer should help you: How to convert NSArray to NSData?

Community
  • 1
  • 1
Shaggy Frog
  • 27,575
  • 16
  • 91
  • 128
0

The data that you probably want to send is simply 0x1b50, which is the decimal number 6992 (assuming big-endian), and fits into two bytes. This is not the same as a string (which could contain anything) even if it happens to contain some human-readable representation of those numbers.

I'm assuming you want to send this as binary data, and if so one way would be to simply send a buffer formed by a single UInt16 instead of a string. I'm not very familiar with the relevant APIs, but look to see if you can populate the NSData with an integer, perhaps something like:

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

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

Again, I'm not fluent with Objective C, but this should be the general approach to sending the number 0x1b50 as binary data.

richardolsson
  • 4,041
  • 1
  • 17
  • 19