2017-10-31 19 views
0

私はここで多くの質問をしましたが、どれも私にとってうまくいかないようです。文字列をUTF-32文字列に変換したいだけです。画像enter image description hereUTF-32文字列への文字列

var str = "Your" 

let dataenc = str.data(using: String.Encoding.utf32) 

extension Data { 
    func hexEncodedString() -> String { 
     return map { String(format: "%04hhx", $0) }.joined() 
    } 
} 

let data = str.data(using: .utf16)! 
let hexString = data.map{ String(format:"%02x", $0) }.joined() 

print(data.hexEncodedString()) 
print(hexString) 

に示すと同じように、これは私が手出力が

00ff00fe00590000006f00000075000000720000

fffe59006f0075007200

何をすべきかわからない

ある

を動作しません。 。前もって感謝します。

答えて

1

同じ結果を得るには、.utf32BigEndian文字列エンコーディングを使用する必要があります。

extension Data { 
    func hexEncodedString() -> String { 
     return map { String(format: "%02x", $0) }.joined() 
    } 
} 

var str = "Your" 
let dataenc = str.data(using: .utf32BigEndian)! 
print(dataenc.hexEncodedString()) 

出力:ちょうど.utf32を使用するときに文字列の20のバイトを取得すること

000000590000006f0000007500000072

注 "あなた" が、.utf32BigEndianであなただけの同じ文字列の16のバイトを取得。これらの余分な4バイトは "BOM"(バイトオーダーマーカー)を表します。あなたのケースでは、.utf32を使用した結果は、データの開始時に、あなたに「BOM」と「リトルエンディアン」形式のデータを与えました。データが余分に00ff00fe(BOM)で開始し、次の4バイトのそれぞれが間違った順序で登場した理由です。明示的.utf32BigEndianを述べ

は、所望の順序でバイトを置き、BOMを排除します。 rv7284 @

+0

- 場合は、あなたが、私はちょうど.utf32BinEndian' 'の必要なエンコーディングに比べて' .utf32'を使用しているときは、受信出力の説明と私の答えを更新興味が。 – rmaddy

関連する問題