在我的程序中,我收到了一个如下所示的NSString:AA010158AA7D385002
。我需要它传递给它接受一个字符字节数组的方法,如下:将NSString转换为char字节数组
char[9] = {0xAA, 0x01, 0x01, 0x58, 0xAA, 0x7D, 0x38, 0x50, 0x02};
如何把我的NSString转换为char字节数组像这样的?
谢谢!
在我的程序中,我收到了一个如下所示的NSString:AA010158AA7D385002
。我需要它传递给它接受一个字符字节数组的方法,如下:将NSString转换为char字节数组
char[9] = {0xAA, 0x01, 0x01, 0x58, 0xAA, 0x7D, 0x38, 0x50, 0x02};
如何把我的NSString转换为char字节数组像这样的?
谢谢!
我终于设法找到了我自己的问题的答案。我在这里发布它,以便它可以帮助别人。
所以我用的方法来一个NSString十六进制转换为字节:
@implementation NSString (HexToBytes)
- (NSData *)hexToBytes
{
NSMutableData *data = [NSMutableData data];
int idx;
for (idx = 0; idx + 2 <= self.length; idx += 2) {
NSRange range = NSMakeRange(idx, 2);
NSString *hexStr = [self substringWithRange:range];
NSScanner *scanner = [NSScanner scannerWithString:hexStr];
unsigned int intValue;
[scanner scanHexInt:&intValue];
[data appendBytes:&intValue length:1];
}
return data;
}
@end
然后,我只是用它这样的:
NSString *str = @"AA010158AA7D385002";
NSData *databytes = [str hexToBytes];
char *bytePtr = (char *)[databytes bytes];
现在我终于有了我的字符数组。希望它可以帮助别人。
[This](https://stackoverflow.com/a/7500472/865175)帮助我而不是这个答案。 –
NSString *strCharData = @"AA010158AA7D385002";
const char *characterRes = [strCharData cStringUsingEncoding:NSUTF8StringEncoding];
or
NSString *strCharData = @"AA010158AA7D385002";
const char *characterRes = [strCharData UTF8String];
使用这个答案,如果我是正确的,我做一点的编码,但可能也有简单的解决方案的可能性也很喜欢@ user3182143
NSString * inputStr = @"AA010158AA7D385002";
NSMutableArray *charByteArray = [[NSMutableArray alloc]initWithCapacity:1];
int i = 0;
for (i = 0; i+2 <= inputStr.length; i+=2) {
NSRange range = NSMakeRange(i, 2);
NSString* charStr = [inputStr substringWithRange:range];
[charByteArray addObject:[NSString stringWithFormat:@"0x%@",charStr]];
}
输出:
字符[9] =( 0xAA, 0x01, 0x01, 0x58, 和0xAA, 0x7D, 0x38, 为0x50, 0×02 )
这不会像OP问的那样给出一个char [9],那会给NSArray
@uliwitness这是什么意思NSArray
@Mukesh如果你可以通过输出作为char [9]来更新你的答案,我会接受你的答案。 – fraxool
由于您的文字是十六进制,你想实际字节出(各自对应于两个十六进制字符),你必须手动转换将每个字符放入相应的数字中,然后将它们一起添加到正确的数值中。
要做到这一点,我利用了这样一个事实:在ASCII字符中,a ... z连续,0 ... 9。我还利用了十六进制是有效ASCII的事实,并且从0到127的Unicode字符与它们对应的ASCII字符相同。
下面是一个程序,(再次为十六进制)做到这一点,并打印出原始字符串的字符以及计算的字节:
#import <Foundation/Foundation.h>
int main(int argc, char *argv[])
{
@autoreleasepool
{
NSString *hexStr = @"1234567890abcdef12";
unsigned char theBytes[9] = {};
for(NSUInteger x = 0; x < sizeof(theBytes); x++)
{
unsigned char digitOne = [hexStr characterAtIndex: x * 2];
if(digitOne >= 'a')
digitOne -= 'a' -10;
else
digitOne -= '0';
unsigned char digitTwo = [hexStr characterAtIndex: (x * 2) +1];
if(digitTwo >= 'a')
digitTwo -= 'a' -10;
else
digitTwo -= '0';
printf("%01x%01x",digitOne,digitTwo);
theBytes[x] = (digitOne << 4) | digitTwo;
}
printf("\n");
for(int x = 0; x < sizeof(theBytes); x++)
printf("%02x",theBytes[x]);
printf("\n");
}
}
注:此代码天真地假设你提供一个正确的字符串。即您的输入只能包含小写字符和数字,并且只能包含18个字符。任何其他事情,你会得到一个错误的结果或例外。
检查此问题http://stackoverflow.com/questions/11087031/how-to-convert-an-initwithbytes-nsstring-to-unsigned-char?rq=1 – iOS
你想获得每个单独的char字节或char? –
@MianShahbazAkram在我的例子字符串中,我想“AA”将结果“0xAA”作为一个字节,我可以在我的char数组中传递。 – fraxool