ฉันต้องการทราบวิธีแยกวิเคราะห์สตริงฐานสิบหกซึ่งเป็นตัวแทนของตัวเลขใน Objective-C ฉันยินดีที่จะใช้ทั้งวัตถุประสงค์หรือวิธีการตาม C ก็ใช้ได้
ตัวอย่าง:
#01FFFFAB
ควรแยกวิเคราะห์เป็นจำนวนเต็ม: 33554347
ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม!
ฉันต้องการทราบวิธีแยกวิเคราะห์สตริงฐานสิบหกซึ่งเป็นตัวแทนของตัวเลขใน Objective-C ฉันยินดีที่จะใช้ทั้งวัตถุประสงค์หรือวิธีการตาม C ก็ใช้ได้
ตัวอย่าง:
#01FFFFAB
ควรแยกวิเคราะห์เป็นจำนวนเต็ม: 33554347
ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม!
คำตอบ:
คำตอบของ Joshua Weinberg ส่วนใหญ่ถูกต้องอย่างไรก็ตาม0x
คำนำหน้าเป็นทางเลือกเมื่อสแกนเลขฐานสิบหก หากคุณมีสตริงในรูปแบบ#01FFFFAB
คุณยังสามารถใช้ได้ NSScanner
แต่คุณสามารถข้ามอักขระตัวแรกได้
unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"#01FFFFAB"];
[scanner setScanLocation:1]; // bypass '#' character
[scanner scanHexInt:&result];
0x
(หรือ0X
) NSScanner จะยอมรับคำนำหน้าเหล่านั้น
คุณสามารถใช้NSScannerสำหรับสิ่งนี้
unsigned int outVal;
NSScanner* scanner = [NSScanner scannerWithString:@"0x01FFFFAB"];
[scanner scanHexInt:&outVal];
outVal
จะมี int ที่คุณกำลังมองหา 0x เป็นทางเลือก
strtol () เป็นเพื่อนของคุณ
มันแปลงสตริงเป็นแบบยาวและคุณสามารถส่งฐานของตัวเลขเข้าไปได้โดยให้ขีดเครื่องหมาย # ออกก่อนหรือส่งไปยัง strtol ตัวชี้ไปยังอักขระตัวเลขตัวแรก
strtol
ฟังก์ชั่นยังเป็นผ่อนปรนมากขึ้น เขียนการทดสอบหน่วยอย่างละเอียด (รวมถึงช่องว่างอักขระที่ไม่ใช่เลขฐานสิบหก ฯลฯ ) เนื่องจากคุณจะพบกรณีขอบที่น่าแปลกใจที่NSScanner
ช่วยให้คุณควบคุมได้มากขึ้น
คุณสามารถใช้บรรทัดด้านล่างสำหรับการแปลง รหัสบรรทัดเดียว:
NSString *hexString = @"01FFFFAB";
length = (UInt64)strtoull([hexString UTF8String], NULL, 16);
NSLog(@"The required Length is %d", length);
Happy Coding !!!
0x
(หรือ0X
) หรือ +/- หรืออักขระอื่น ๆ ที่ถือว่าไม่ถูกต้องในข้อมูลที่คุณป้อน
ไลบรารีมาตรฐานSwift 4เปิดตัว initializer ใหม่สำหรับการแยกวิเคราะห์จำนวนเต็มทุกประเภท ต้องใช้สตริงในการแยกวิเคราะห์ด้วย radix (เช่นฐาน) และส่งกลับจำนวนเต็มที่เป็นทางเลือก:
let number = Int("01FFFFAB", radix: 16)!
ตามแอปเปิ้ล:
อ็อบเจ็กต์ NSScanner ตีความและแปลงอักขระของอ็อบเจ็กต์ NSString เป็นค่าตัวเลขและสตริง
ดังนั้นถ้าคุณมีNSData
obj คุณสามารถทำต่อไป
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
(หรือ0X
) หรืออักขระอื่นใดที่ถือว่าไม่ถูกต้องในอินพุตของคุณ แต่ NSScanner ยอมรับ
สำหรับ Swift 3:
var hex = "#01FFFFAB"
hex.remove(at: hex.startIndex)
var rgbValue:UInt32 = 0
Scanner(string: hex).scanHexInt32(&rgbValue)
// rgbValue == 33554347