[NSData bytes]
を1つずつ反復してNSMutableString
に追加するか、NSLog()
を使用して印刷するにはどうすればよいですか?NSDataバイトを繰り返します
7
A
答えて
28
むしろ可変文字列にバイトを追加するよりも、データを使用して文字列を作成します。
// Be sure to use the right encoding:
NSString *result = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
あなた本当にがバイトをループにしたい場合:
NSMutableString *result = [NSMutableString string];
const char *bytes = [myData bytes];
for (int i = 0; i < [myData length]; i++)
{
[result appendFormat:@"%02hhx", (unsigned char)bytes[i]];
}
11
更新! iOS 7以来、NSDataオブジェクトのすべてのバイトを反復処理する、新しい、好ましい方法があります。
NSData
は、今では、発信者のための単一のバイト配列に基礎となるチャンクの全てをフラット化する必要があるため[NSData bytes]
は時々、メモリ効率が悪い呼び出し、ボンネットの下に複数の互いに素バイト配列チャンクで構成することができますので。
この問題を回避するには、NSDataのenumerateByteRangesUsingBlock:
メソッドを使用してバイトを列挙することをお勧めします。既存のチャンクの範囲を返します。新しい配列構造を生成することなく直接アクセスできます。もちろん、指定されたCスタイルの配列で不適切にぶつからないように注意する必要があります。
NSMutableString* resultAsHexBytes = [NSMutableString string];
[data enumerateByteRangesUsingBlock:^(const void *bytes,
NSRange byteRange,
BOOL *stop) {
//To print raw byte values as hex
for (NSUInteger i = 0; i < byteRange.length; ++i) {
[resultAsHexBytes appendFormat:@"%02x", ((uint8_t*)bytes)[i]];
}
}];
関連する問題
- 1. NSDataの逆順バイト
- 2. C配列を繰り返します。
- 3. Kotlin:JSONArrayを繰り返します。
- 4. DynamicJsonObjectを繰り返します
- 5. データセットを繰り返します
- 6. `pyparsing`:` ParsedResults`を繰り返します
- 7. * argsを繰り返しますか?
- 8. Ajaxはヘッダを繰り返します
- 9. シンプルなエスプレッソテスト「繰り返しx秒間繰り返し」エラー
- 10. NSData to NSStringはnullを返します
- 11. NSData dataWithContentOfFileはnilを返しますか?
- 12. Schemeの積分を繰り返して繰り返し計算する
- 13. 最初の非繰り返し文字列を返します
- 14. PHPが4回繰り返すと4回繰り返す
- 15. jQueryの繰り返しコード
- 16. 繰り返し入力
- 17. BigQuery creat繰り返しレコードフィールド
- 18. Googleプロダクト/繰り返しプロジェクト
- 19. 繰り返しプログラムのヘルプ?
- 20. Xcodeの繰り返しビルドエラーコード
- 21. PHP/MYSQL +繰り返し中
- 22. ContentPlaceHolders:繰り返しコンテンツ
- 23. ListViewデータの繰り返し
- 24. アンドロイドVideoView繰り返し
- 25. 学習ハスケル:繰り返し
- 26. チェックの繰り返し - プロローグ
- 27. 繰り返しjqueryのセレクタ
- 28. 繰り返しブートストラップ輸入
- 29. 繰り返し擬似クラスセレクタ
- 30. UI:繰り返しは私
doSomethingWithChar行はどのようにする必要がありますか?バイトの16進表現をNSMutableStringに追加したいのですか? – yannis
nsdataが実際に文字列でない場合はどうなりますか? 0x00バイトが含まれていると、データ全体を反復処理することができません。 –