0

注-ここでhexttoIntを変換しようとしていません..私が達成したいのは、16進形式のシリアル番号305419896(10進数)の9桁が12345678であることです..0x1234を1つの値として、0x5678を他の値として取得しようとしています価値..

"0145"私の10進数は021340031で、16進数は01459F7Fで、とのような2つの文字列に分割されて"9f7f"います..この文字列値は、 0x0145 、 0x9f7f ..のような形式で必要です。

そのために、最初に Str を Int に変換しようとしています。

 let firstValue = Int("0145") 

それから私は得て145います..

String を UInt16 に直接変換する方法はありますか、または期待値を取得するための回避策はありますか?

4

2 に答える 2

2

私の理解が正しければ、16 進数を半分に分割し、最下位 2 バイトと最上位 2 バイトを表示しますか?

これを行うには、ビット マスク演算子とビット シフト演算子を使用します。

let a = 0x00045678

let first = (a >> 16) & 0x0000FFFF
let second = a & 0x0000FFFF

let firstString = String(format:"0x%04X", first)
let secondString = String(format:"0x%04X", second)

出力:

0x0004
0x5678

Format0x%04Xは、少なくとも 4 桁の 16 進数を出力し、必要に応じて先頭にゼロを付けます。

于 2018-05-09T13:19:58.440 に答える