Saya ingin tahu cara mengurai string hex, mewakili angka, di Objective-C. Saya bersedia menggunakan metode objektif, atau metode berbasis C, baik-baik saja.
contoh:
#01FFFFAB
harus mengurai menjadi integer: 33554347
Bantuan apa pun akan dihargai!
Saya ingin tahu cara mengurai string hex, mewakili angka, di Objective-C. Saya bersedia menggunakan metode objektif, atau metode berbasis C, baik-baik saja.
contoh:
#01FFFFAB
harus mengurai menjadi integer: 33554347
Bantuan apa pun akan dihargai!
Jawaban:
Jawaban Joshua Weinberg sebagian besar benar, namun 0xawalannya opsional saat memindai bilangan bulat heksadesimal. Jika Anda memiliki string dalam format #01FFFFAB, Anda masih dapat menggunakan NSScanner, tetapi Anda dapat melewati karakter pertama.
unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"#01FFFFAB"];
[scanner setScanLocation:1]; // bypass '#' character
[scanner scanHexInt:&result];
0x(atau 0X). NSScanner akan menerima prefiks tersebut.
Anda dapat menggunakan NSScanner untuk ini
unsigned int outVal;
NSScanner* scanner = [NSScanner scannerWithString:@"0x01FFFFAB"];
[scanner scanHexInt:&outVal];
outValakan berisi int yang Anda cari. 0x adalah opsional.
strtol () adalah teman Anda.
Ini mengubah string menjadi panjang, dan Anda dapat meneruskan basis nomor tersebut. Hapus tanda # terlebih dahulu, atau berikan penunjuk ke karakter numerik pertama ke strtol.
strtolfungsi juga lebih banyak ringan. Tulis pengujian unit secara menyeluruh (termasuk spasi, karakter non-hex, dll ..) karena Anda akan menemukan beberapa kasus tepi yang mengejutkan yang NSScannermemberi Anda lebih banyak kendali.
Anda dapat menggunakan baris di bawah ini untuk konversi. Ini hanya kode satu baris:
NSString *hexString = @"01FFFFAB";
length = (UInt64)strtoull([hexString UTF8String], NULL, 16);
NSLog(@"The required Length is %d", length);
Selamat Coding !!!
0x(atau 0X) atau +/- atau karakter lain yang tidak dianggap valid dalam masukan Anda.
Pustaka standar Swift 4 memperkenalkan penginisialisasi baru untuk mengurai semua jenis bilangan bulat. Dibutuhkan string untuk mengurai dengan radix (yaitu base) dan mengembalikan integer opsional:
let number = Int("01FFFFAB", radix: 16)!
Menurut apel:
Objek NSScanner menafsirkan dan mengubah karakter objek NSString menjadi nilai angka dan string.
jadi, jika Anda memiliki NSDatakeberatan, Anda dapat melakukan selanjutnya
NSString *dataDescription = data.description;
NSString *dataAsString = [dataDescription substringWithRange:NSMakeRange(1, [dataDescription length]-2)];
unsigned intData = 0;
NSScanner *scanner = [NSScanner scannerWithString:dataAsString];
[scanner scanHexInt:&intData];
0x(atau 0X) atau karakter lain yang tidak dianggap valid dalam masukan Anda, tetapi diterima oleh NSScanner.