NSStringの(ASCII)テキストをNSStringの2進数に変換できますが、逆の処理をしています。たとえば、「Hi」は「01101000 01101001」になります。バイナリの "String"をNSStringのテキストに変換する
I need: "01101000 01101001" to become "Hi".
私はこれを実装するための最も直接的方法を探しています。バイナリ数の8ビットごとの間隔に注意してください。フォーマットを考慮し
NSStringの(ASCII)テキストをNSStringの2進数に変換できますが、逆の処理をしています。たとえば、「Hi」は「01101000 01101001」になります。バイナリの "String"をNSStringのテキストに変換する
I need: "01101000 01101001" to become "Hi".
私はこれを実装するための最も直接的方法を探しています。バイナリ数の8ビットごとの間隔に注意してください。フォーマットを考慮し
は常にそのようなで、このコードは動作するはずです:それの一部が不明であった場合
NSString *
BinaryToAsciiString (NSString *string)
{
NSMutableString *result = [NSMutableString string];
const char *b_str = [string cStringUsingEncoding:NSASCIIStringEncoding];
char c;
int i = 0; /* index, used for iterating on the string */
int p = 7; /* power index, iterating over a byte, 2^p */
int d = 0; /* the result character */
while ((c = b_str[i])) { /* get a char */
if (c == ' ') { /* if it's a space, save the char + reset indexes */
[result appendFormat:@"%c", d];
p = 7; d = 0;
} else { /* else add its value to d and decrement
* p for the next iteration */
if (c == '1') d += pow(2, p);
--p;
}
++i;
} [result appendFormat:@"%c", d]; /* this saves the last byte */
return [NSString stringWithString:result];
}
を教えてください。
どういうことですか?
NSString* stringFromBinString(NSString* binString) {
NSArray *tokens = [binString componentsSeparatedByString:@" "];
char *chars = malloc(sizeof(char) * ([tokens count] + 1));
for (int i = 0; i < [tokens count]; i++) {
const char *token_c = [[tokens objectAtIndex:i] cStringUsingEncoding:NSUTF8StringEncoding];
char val = (char)strtol(token_c, NULL, 2);
chars[i] = val;
}
chars[[tokens count]] = 0;
NSString *result = [NSString stringWithCString:chars
encoding:NSUTF8StringEncoding];
free(chars);
return result;
}
(コミュニティのwikiとして投稿 - 私の古い-SKOOL Cのスキルが死んで錆びている - 。:-)これをクリーンアップして自由に感じる)
あなたがCの関数 'strtoul'へのアクセス権を持っていますか? –