2017-11-12 8 views
1

私は、次のCプログラムを持っている:スウィフトとCの文字列をフォーマットすると、異なる結果を生成

#include <stdio.h> 

int main(int argc, char *argv[argc]) 
{ 
    printf("%c%c%c", 10, 56, 240); 
    return 0; 
} 

私は、出力の小さな違いがあります、

import Foundation 

let interpolated = String(format: "%c%c%c", 10, 56, 240) 
print("\(interpolated)", terminator: "") 

としてスウィフトに翻訳しかし、ファイルに保存されたとき。 Cプログラムの出力:360

\

8(3バイト)

かつ迅速プログラム

8D

(4バイト)

なぜですか?

+0

どのようにファイルに保存しましたか?私の推測では、SwiftはデフォルトでUTF-8を生成します。 – melpomene

+0

私は単純に './program> File.txt'を実行します。 –

+0

SwiftがHaskellやPerlのようなものなら、ファイルハンドル(stdout)にUnicodeテキストをバイトに変換(エンコード)する方法を示すエンコーディングレイヤーがあります。 – melpomene

答えて

2

スウィフトのCharacterは、バイトではなくユニコード文字です。 240は、 "Latin Small Letter Eth"( "ð")というコードポイントU+00F0と解釈されています。 printの文字列の後に、この文字はUTF-8でエンコードされ、2バイトのC3 B0となり、視聴者プログラムによってðと表示されます。

+0

それでは、Cプログラムと同じ出力をどうすれば得られますか? –

関連する問題