Chciałbym wiedzieć, jak analizować ciąg szesnastkowy reprezentujący liczbę w Objective-C. Jestem gotów użyć zarówno metody obiektywnej, jak i opartej na C, albo jest w porządku.
przykład:
#01FFFFAB
powinien przeanalizować liczbę całkowitą: 33554347
Każda pomoc będzie mile widziana!
0x
(lub0X
). NSScanner zaakceptuje te przedrostki.możesz użyć do tego NSScanner
outVal
będzie zawierać int, którego szukasz. 0x jest opcjonalne.źródło
strtol () jest twoim przyjacielem.
Konwertuje ciąg na długi i możesz przekazać podstawę liczby w. Usuń jednak ten #, który się najpierw wyloguje, lub przekaż strtolowi wskaźnik do pierwszego znaku numerycznego.
źródło
strtol
Funkcją jest również dużo bardziej łagodny. Napisz dokładne testy jednostkowe (uwzględniaj spacje, znaki inne niż szesnastkowe itp.), Ponieważ znajdziesz kilka zaskakujących przypadków skrajnych, któreNSScanner
zapewniają większą kontrolę.Możesz użyć poniższej linii do konwersji. To tylko jeden wiersz kodu:
Miłego kodowania !!!
źródło
0x
(lub0X
), +/- lub innych znaków, które nie są uważane za prawidłowe w twoim wejściu.Biblioteka standardowa Swift 4 wprowadziła nowy inicjator do analizowania wszystkich typów liczb całkowitych. Do parsowania z radixem (tj. Podstawą) potrzebny jest łańcuch i zwraca opcjonalną liczbę całkowitą:
źródło
Według Apple:
więc jeśli masz obiekt,
NSData
możesz zrobić to dalejźródło
0x
(lub0X
) ani żadnych innych znaków, które nie są uważane za prawidłowe w twoim wejściu, ale które są akceptowane przez NSScanner.Dla Swift 3:
źródło