Max*_*rke 10 iphone cocoa hex objective-c nsdata
相当新的iPhone开发人员.构建一个应用程序,通过TCP/IP套接字连接向设备发送RS232命令.我已经将通信部分关闭,并且可以发送ASCII命令.这是我遇到问题的十六进制代码命令.
所以我要说我要发送以下十六进制数据(采用这种格式):
\ X1C\x02d\X00\X00\X00\XFF\0x7F部分
如何将其转换为我的send方法所期望的NSData对象?
显然这对于这个十六进制数据不起作用(但是对于标准的ascii命令):
NSString *commandascii;
NSData *commandToSend;
commandascii = @"\x1C\x02d\x00\x00\x00\xFF\x7F";
commandToSend = [commandascii dataUsingEncoding:NSStringEncoding];
Run Code Online (Sandbox Code Playgroud)
首先,一些\ x十六进制代码是转义字符,在XCode中编译时,我收到"输入转换已停止..."警告.并且NSStringEncoding显然不适合这个十六进制字符串.
所以第一个问题是如何存储这个十六进制字符串我猜,然后如何转换为NSData.
有任何想法吗?
Max*_*rke 30
NSStrings中的十六进制代码,如"00 05 22 1C EA 01 00 FF".'command'是十六进制NSString.
command = [command stringByReplacingOccurrencesOfString:@" " withString:@""];
NSMutableData *commandToSend= [[NSMutableData alloc] init];
unsigned char whole_byte;
char byte_chars[3] = {'\0','\0','\0'};
for (int i = 0; i < ([command length] / 2); i++) {
byte_chars[0] = [command characterAtIndex:i*2];
byte_chars[1] = [command characterAtIndex:i*2+1];
whole_byte = strtol(byte_chars, NULL, 16);
[commandToSend appendBytes:&whole_byte length:1];
}
NSLog(@"%@", commandToSend);
Run Code Online (Sandbox Code Playgroud)
这是在NSString上的类别上实现的示例解码器.
#import <stdio.h>
#import <stdlib.h>
#import <string.h>
unsigned char strToChar (char a, char b)
{
char encoder[3] = {'\0','\0','\0'};
encoder[0] = a;
encoder[1] = b;
return (char) strtol(encoder,NULL,16);
}
@interface NSString (NSStringExtensions)
- (NSData *) decodeFromHexidecimal;
@end
@implementation NSString (NSStringExtensions)
- (NSData *) decodeFromHexidecimal;
{
const char * bytes = [self cStringUsingEncoding: NSUTF8StringEncoding];
NSUInteger length = strlen(bytes);
unsigned char * r = (unsigned char *) malloc(length / 2 + 1);
unsigned char * index = r;
while ((*bytes) && (*(bytes +1))) {
*index = strToChar(*bytes, *(bytes +1));
index++;
bytes+=2;
}
*index = '\0';
NSData * result = [NSData dataWithBytes: r length: length / 2];
free(r);
return result;
}
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37614 次 |
| 最近记录: |