1

私はJavascriptでこのコードを持っています:

var f = chr(50) + chr(0) + chr(1) + chr(64) + chr(24) + chr(0) + chr(0) + chr(1) + chr(159) + chr(13) + chr(0) + chr(0) + chr(224) + chr(7);

function chr(AsciiNum) {
    return String.fromCharCode(AsciiNum);
}

console.logこれを次のように出力します

2@
à 

14の長さ。

Objective Cに移植しようとしています。次のことを試しました:

NSString *f = [NSString stringWithFormat:@"%c%c%c%c%c%c%c%c%c%c%c%c%c%c",50, 0 ,1, 64 , 24 , 0 , 0 , 1, 159,  13 , 0 , 0 , 224 , 7];

しかし、NSLog を使用すると、JavaScript コードとは異なる出力を受け取りました。

2@ü

私は何を間違っていますか?文字セットの問題ですか?

4

1 に答える 1

0

あなたの問題は、NSString の ASCII サポートが厳密な 7 ビット ASCII エンコーディングに制限されているという事実に起因しているようです。つまり、文字 0-127 のみがサポートされています。文字を格納するには別のデータ型を使用する必要があります。その別のデータ型はunicharであり、2^15-1 を正確にサポートしているのはunsigned shortです。ただし、このカテゴリの Unicode で動作する NSString に変換する必要があります。

@interface NSString (MNNSStringWithUnichar)
+ (NSString *) stringWithUnichar: (unichar) value;
@end

@implementation NSString (MNNSStringWithUnichar)

+ (NSString *) stringWithUnichar:(unichar) value {
     NSString *str = [NSString stringWithFormat: @"%C", value];
     return str;
}
@end

または単にNSLog(@"%C", value);

于 2012-07-01T15:15:37.550 に答える