Próbuję utworzyć ciąg z wartości szesnastkowych w tablicy, ale ilekroć hex w tablicy zaczyna się od zera, znika również w ciągu wynikowym.
używam String(value:radix:uppercase)
aby utworzyć ciąg.
Przykład:
Oto tablica: [0x13245678, 0x12345678, 0x12345678, 0x12345678]
.
Co daje mi ciąg: 12345678123456781234567812345678
(32 znaki)
Ale następująca tablica: [0x02345678, 0x12345678, 0x02345678, 0x12345678]
(zauważ, że wymieniłem dwa 1
„z zerami).
Daje mi ciąg: 234567812345678234567812345678
(30 znaków)
Nie jestem pewien, dlaczego usuwa zera. Wiem wartość jest poprawne; jak mogę go sformatować, aby zachować zero, jeśli tak było?
Odpowiedzi:
3 dla odpowiedzi № 1Numer 0x01234567
jest naprawdę po prostu 0x1234567
. Zera wiodące w literałach liczbowych nic nie znaczą (chyba że używasz początkowych zer dla literałów liczb ósemkowych).
Zamiast używać String(value:radix:uppercase)
, posługiwać się String(format:)
.
let num = 0x1234567
let str = String(format: "%08X", num)
Objaśnienie formatu:
- The
0
oznacza uzupełnienie lewego końca łańcucha zerami w razie potrzeby. - The
8
oznacza, że chcesz, aby wynik miał 8 znaków - The
X
oznacza, że chcesz przekonwertować liczbę na szesnastkę wielkimi literami. Posługiwać sięx
jeśli chcesz małe litery szesnastkowe.