-1

任意の長さの一連の 1 と 0 を格納する必要があります。

int を使用する予定でしたが、実際に必要なのはビットストリームだけであることに気付きました。

NSMutableData はまさにそのようです。誰かが話しているのを除いて、バイトを設定する方法、または jpeg または文字列を保存する方法だけです。それよりももっと細かくする必要があります。

110010101011110110 のような一連の 1 と 0 が与えられた場合、それを NSData オブジェクトにする方法と、それを取得する方法を教えてください。

NSData の appendBytes:length: と mutableBytes はすべてバイト レベルなので、下位から始める必要があります。これらの 1 と 0 をバイトとして格納しても意味がありません。バイト自体が 1 と 0 のセットで構成されている場合です。ビットの設定方法を教えてくれるものを見つけるのに苦労しています。

ここにいくつかの偽のコードがあります:

NSString *sequence = @"01001010000010"; //(or int sequence, or whatever)
for (...){//iterate through whatever it is--this isn't what I need help with
     if ([sequence intOrCharOrWhateverAtIndex: index] == 0) {
          //do something to set a bit -- this is what I need help with
     } else {
          //set the bit the other way -- again, this is what I need help with 
     }
}
NSData *data = [NSData something]; //wrap it up and save it -- help here too
4

2 に答える 2

0

私はこの回答を得ました: Convert Binary to Decimal in Objective C

基本的に、この質問は「2 進数の文字列表現をプリミティブな数値型に解析するにはどうすればよいか」と言い換えることができると思います。魔法はすべて strtol にあります。

  NSString* b = @"01001010000010";  
  long v = strtol([b UTF8String], NULL, 2);
  long data[1];
  data[0] = v;
  NSData* d = [NSData dataWithBytes:data length:sizeof(data)];
  [d writeToFile:@"test.txt" atomically:YES];

このアイデアを使用すると、文字列を 64 文字のチャンクに分割し、それらを long に変換できます。

于 2015-06-18T16:30:11.730 に答える