2016-04-06 32 views
1

私はSwiftにはかなり新しいですが、1年以上Javaでプログラミングしています。 Swiftを試したかったのですが、Macを持っていないので代わりにLinuxとオープンソースのSwiftパッケージを使用しています。これは素晴らしいですが、私は膨大な量のエラーが発生し、Ubuntu OSで最も一般的な修正や実装がうまくいかないようです。ASCIIをHEXに変換し、Swift for Linuxに戻す

私はAtomを使用して、通常のASCII文字列を16進コードに変換し、それぞれのASCIIテキストに戻すプログラムがあります。私はそれがこのコードを使用した16進数に得るために管理している:

str = str.utf8.map{ $0 }.reduce("") { 
     $0 + String($1, radix: 16, uppercase: false) 
    } 

私は別の質問hereのこのオフを得ました。私はコメントして元に戻す方法を尋ねるのが好きですが、私はStack Overflowを初めて使っています。何かをコメントするには50の評判が必要です。 :/

私は方法がhereを実装しようとしましたが、私は、Atomで、次のエラーを得た:

/home/xxx/xxx/main.swift:15:20: error: cannot convert value of type 'String' to type 'NSSTring' in coercion 
let nsString = hexString as NSString 
       ^~~~~~~~~ 

だから、私は検索に保ち、thisポストを見つけました。 OPのバージョンは私の約8エラーを与えたし、私はShripadaのバージョン@しようとしたとAtomは私に、このエラーが発生しました:

/home/xxx/xxx/main.swift:36:20: error: 'stride(from:to:by:)' is unavailable: call the 'stride(to:by:)' method instead 
let numbers = stride(from: 0, to:chars.count, by: 2).map{ 
       ^~~~~~ 

をだから私は(に:によって:)ストライドを試してみました...

/home/xxx/xxx/main.swift:36:20: error: cannot invoke 'stride' with argument list of type '(to: Int, by: Int)' 

として、今のところ私はここで多くの記事を検索しましたが、私はまだ単一の解決策を見つけることができません...どんな助力も大変ありがとうございます。

答えて

1

あなたが提供したサンプルを組み合わせて少し修正しました。現在は機能しています。コードにアクセスして、IBM Swift Sandboxで実行することができます。here

//Input text 
var text = "Hello" 
print("Text: " + text) 

// Convert from text -> hex 
let hex = text.utf8.map{ $0 }.reduce("") { 
    $0 + String($1, radix: 16, uppercase: false) 
} 
print("Hex: " + hex) 

//Convert from hex -> text 
text = "" 
let chars = Array(hex.characters) 
let numbers = stride(from: 0, to: chars.count, by: 2).map() { 
    let twoChars = String(chars[$0 ..< min($0 + 2, chars.count)]) 
    text.append(String(describing: UnicodeScalar(Int(twoChars, radix: 16)!)!)) 
} 

print("Text: " + text) 
関連する問題