2011-08-23 7 views
1

WiFi를 통해 16 진수 데이터를 보내려고합니다.장치에 16 진수 데이터 보내기 (NSString을 16 진수 데이터로 변환)

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

대신 16 진수 데이터를 전송, 그것은 텍스트 형식으로 보내는 것 :

코드는 다음과 같은 것입니다. NSUTF8StringEncoding으로 시도했지만 동일합니다. 나는 NSStream 클래스와 함께 사용하고 있습니다.

답변

0

아마도 보내려는 데이터는 10 진수 6992 (빅 엔디안 가정) 인 0x1b50이며 2 바이트로 맞습니다. 사람이 읽을 수있는 표현이 포함되어 있어도이 문자열과는 다른 문자열을 포함 할 수 있습니다.

나는 이것을 바이너리 데이터로 보내고 싶다고 가정하고있다. 그렇다면 문자열 대신 하나의 UInt16으로 형성된 버퍼를 보내기 만하면된다. 난 안 관련 API를 잘 알고 있어요,하지만 당신은 아마 뭔가처럼, 정수로있는 NSData을 채울 수 있는지 살펴 : 다시

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

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

, 내가 목표 C와 유창하지 않다, 그러나 이것은해야 이진 데이터로 0x1b50 번호를 보내는 일반적인 방법이 될 수 있습니다.

+0

얘들 아를. 고마워. 그 지금 일하고있어. 하지만 여전히 이진 데이터 배열을 구문 분석하는 방법을 알아야합니다. – user774150

2

NSString *abc = @"0x1b 0x50"으로 기대치를 얻지 못했습니다. 그것은 NSString *abc = @"cat dog 123 0x0x0x"과 거의 같습니다. 공백으로 구분 된 단어 묶음. 따라서 NSData 개체를 만들 때 일련의 실제 숫자가 아닌 일련의 문자로 초기화하는 것입니다. 당신이 NSArray으로 번호를 얻을 수있는 경우

,이 질문/대답은 당신을 도움이 될 것입니다 How to convert NSArray to NSData?