2017-09-13 14 views
0

数値は94887253(ASCII形式)です。 let data = [UInt8]([0x39、0x34、0x38、0x38、0x37、0x32、0x35、0x33] ])整数をUInt8単位の配列に変換する

このようなUInt8単位の配列に数値を変換する関数を書くにはどうすればよいですか?ありがとう。

+2

'[0x39、0x34、0x38、0x38、0x37、0x32、0x35、0x33]はどのように番号12345678に関連していますか? –

+0

@MartinR関連していない、12345678は乱数で、数字のように16進数で提供されます。 –

+0

しかし、あなたは依然として必要なロジックを明示する必要があります。 ASCII? UTF8? 16進値(0xNM)は、Int、1 == 0x01、いいえを表す別の方法です。論理は何ですか? – Larme

答えて

2

あなたが探していることは数(10進数)文字列表現のASCII コードを持つ配列であるようだ:あなたは、小数点文字のASCIIコードを取得したい場合は

let x = 94887253 
let a = Array(String(x).utf8) 

print(a == [0x39, 0x34, 0x38, 0x38, 0x37, 0x32, 0x35, 0x33]) // true 
+0

私はlet rCode = 94887253 let arr = Array(String(rCode).utf8) print( "arr?\(arr)")を試みましたが、 - [57,52,56,56,55,50、 53、51] –

+2

@EvgeniyKlebanは同じ配列です。ベース10の57は16進数で「0x39」です。 – JeremyP

+0

@EvgeniyKlebanそのため、私はprintステートメントを追加しました。結果があなたが探しているものであることを証明するためです。 –

1

シフトを使用します。

var array: [UInt8] = [] 
var n = theInputNumber 
while n > 0 
{ 
    array.append(UInt8(n & 0xff)) 
    n >>= 8 
} 

これは、安全かつ独立エンディアン(アレイがリトルエンディアンであるが、逆が容易である)が、安全でないポインタを使用して、より遅いタイプです。

EDIT

右なので、質問は明確ではありませんでした。あなたは数のASCIIのrepresenatationをしたい場合は、簡単な方法は、文字列にそれを回すと、UTF-8

Array("\(theInputNumber)".utf8) 

それともあなた自身をロールバックする必要がある場合は、私の最初の答えを変更を取ることです

var array: [UInt8] = [] 
var n = theInputNumber 
while n != 0 
{ 
    array.append(UInt8(n % 10) + 0x30) 
    n /= 10 
} 

配列の順序は逆ですが、正しい方法で配列を取得する方法を説明します。

また、負の数を変更する必要があります。

+0

ありがとうございました! –

1

数の表現、あなたはこのようにそれのために独自の関数を書くことができます。機能上

func getAsciiCodesOfDigits(_ n: Int)->[UInt8]{ 
    return String(n).unicodeScalars.map{UInt8($0.value)} 
} 

getAsciiCodesOfDigits(numberToConvert) 

は動作しますが、入力としてIntを使用してString(n).unicodeScalarsの各要素はであることを保証するので文字であるため、UInt8と表され、ASCII文字の場合、UnicodeScalar.valueはASCIIコードを10進形式で返します。

+0

Pasztorたくさんありがとう! –

関連する問題