2017-03-29 9 views
1

私のプログラムでは、次のようなNSStringを受け取っています:AA010158AA7D385002。このようなバイト配列をcharに私のNSStringを変換する方法NSStringをcharバイト配列に変換する

char[9] = {0xAA, 0x01, 0x01, 0x58, 0xAA, 0x7D, 0x38, 0x50, 0x02}; 

:そして、私は以下のように、char型のバイト配列を受け入れるメソッドに渡す必要がありますか?

ありがとうございます!

+0

これを確認してください。http://stackoverflow.com/questions/11087031/how-to-convert-an-initwithbytes-nsstring-to-unsigned-char?rq=1 – iOS

+0

個々のcharバイトまたはcharを取得したいですか? –

+0

@MianShahbazAkram私の例の文字列では、私は私のchar配列で渡すことができるバイトとして結果 "0xAA"を与える "AA"が欲しいです。 – fraxool

答えて

0

最終的に私自身の質問に対する答えを見つけることができました。それが他の人を助ける場合に備えて私はここに掲示しています。

だから私はバイトに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]; 

そして、私はようやく私のchar型の配列を取得します。他の人に役立つことを願っています。

+0

[This](https://stackoverflow.com/a/7500472/865175)は、この回答の代わりに私を助けました。 –

1
NSString *strCharData = @"AA010158AA7D385002"; 
const char *characterRes = [strCharData cStringUsingEncoding:NSUTF8StringEncoding]; 

     or 

NSString *strCharData = @"AA010158AA7D385002"; 
const char *characterRes = [strCharData UTF8String]; 
0

使用この回答私は正しいだ場合、私は少しコーディングをしましたが、また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を、 0x02の )

+0

これは、頼まれたOPのようなchar [9]を与えないでしょう、それはNSArray を与えるでしょう。 – uliwitness

+0

@uliwitness NSArray どういう意味なのですか?コピーでNSArrayに変換することができますが、同じ出力も得られます。 :D –

+0

@Mukesh出力をchar [9]として更新することができれば、私はあなたの答えを受け入れます。 – fraxool

0

あなたのテキストは六角であり、あなたは(2進文字に対応する各)実際のバイト数を出したいので、手動で変換する必要がありますそれぞれの文字を対応する数値に変換し、それらを一緒にして正しい数値にします。

これを行うには、ASCII文字では、... zが0 ... 9のように行内にあるという事実を利用します。私はまた、16進数が有効な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文字で構成されていなければなりません。それ以外の場合は、間違った結果や例外が発生します。

関連する問題