ওবজে-সি-তে আমি স্বাক্ষরবিহীন পূর্ণসংখ্যা n কে একটি হেক্স স্ট্রিং দিয়ে রূপান্তরিত করতাম
NSString *st = [NSString stringWithFormat:@"%2X", n];
আমি এটি সুইফট ভাষায় অনুবাদ করার জন্য দীর্ঘ সময় চেষ্টা করেছি, তবে ব্যর্থ হয়েছিল।
উত্তর:
আপনি এখন করতে পারেন:
let n = 14
var st = String(format:"%02X", n)
st += " is the hexadecimal representation of \(n)"
print(st)
0E is the hexadecimal representation of 14
দ্রষ্টব্য: 2এই উদাহরণের মধ্যে ক্ষেত্র প্রস্থ এবং পছন্দসই সর্বনিম্ন দৈর্ঘ্য উপস্থাপন করে । 0প্যাড থেকে বলা হয়েছে যে সব নেতৃস্থানীয় সাথে ভালো ফলাফল 0এর প্রয়োজনে। (ছাড়া 0, ফলাফলটি শীর্ষস্থানীয় স্থানের সাথে প্যাড করা হবে)। অবশ্যই, যদি ফলাফলটি দুটি অক্ষরের চেয়ে বড় হয়, তবে ক্ষেত্রের দৈর্ঘ্য প্রস্থে ছড়িয়ে যাবে না 2; এটি পূর্ণ ফলাফল প্রদর্শন করতে প্রয়োজনীয় দৈর্ঘ্যে প্রসারিত হবে।
এটি কেবল তখনই কাজ করে যদি আপনি Foundationআমদানি করেন (এর মধ্যে Cocoaবা এর আমদানি অন্তর্ভুক্ত থাকে UIKit)। আপনি যদি আইওএস বা ম্যাকস প্রোগ্রামিং করে থাকেন তবে এটি কোনও সমস্যা নয় ।
বড় হাতের ব্যবহার করুন Xযদি আপনি চান A...Fএবং ছোট হাতের xযদি আপনি চান a...f:
String(format: "%x %X", 64206, 64206) // "face FACE"
তোমার চেয়ে বড় মান পূর্ণসংখ্যা প্রিন্ট করতে চান UInt32.max, যোগ ll( এল-এল , না এগারো বিন্যাস স্ট্রিং):
let n = UInt64.max
print(String(format: "%llX is hexadecimal for \(n)", n))
FFFFFFFFFFFFFFFF is hexadecimal for 18446744073709551615
আসল উত্তর
আপনি এটি করতে এখনও ব্যবহার NSStringকরতে পারেন। বিন্যাসটি হ'ল:
var st = NSString(format:"%2X", n)
এটি stএকটি করে তোলে NSString, সুতরাং জিনিসগুলি যেমন +=কাজ করে না। আপনার সাথে স্ট্রিং সংযুক্ত পাবে চান +=করতে stএকটি মধ্যে Stringভালো:
var st = NSString(format:"%2X", n) as String
বা
var st = String(NSString(format:"%2X", n))
বা
var st: String = NSString(format:"%2X", n)
তারপরে আপনি এটি করতে পারেন:
let n = 123
var st = NSString(format:"%2X", n) as String
st += " is the hexadecimal representation of \(n)"
// "7B is the hexadecimal representation of 123"
সুইফটে ঠিক এর জন্য একটি নির্দিষ্ট initপদ্ধতি চালু রয়েছে String:
let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f
"0xF"একটি রূপান্তর করতে চান UInt?
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16), numberধরণের হবে UInt?আপনার যদি আরও একটি প্রশ্ন জিজ্ঞাসা করা প্রয়োজন :)
String(0xf, radix: 0x10, uppercase: false)
আপনার প্রয়োজন অনুসারে সুইফট 5 এর সাহায্যে, আপনার সমস্যা সমাধানের জন্য আপনি নিম্নলিখিত তিনটি পদ্ধতির মধ্যে একটি চয়ন করতে পারেন।
Stringএর init(_:radix:uppercase:)ইনিশিয়ালাইজার ব্যবহার করা হচ্ছেনিম্নলিখিত ঘোষণা সহ সুইফ্টের Stringএকটি init(_:radix:uppercase:)প্রাথমিককরণ রয়েছে:
init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger
বেস 10, বা অন্য কোনও নির্দিষ্ট বেসে প্রদত্ত মানকে উপস্থাপন করে একটি স্ট্রিং তৈরি করে।
নীচের প্লেগ্রাউন্ড কোডটি কীভাবে এমন একটি ইভেন্ট তৈরি করতে Stringহয় যা হেক্সাডেসিমাল ফর্ম্যাটে init(_:radix:uppercase:)কোনও ইম্পোর্ট না করে এবং আমদানি না করে একটি পূর্ণসংখ্যার মান উপস্থাপন করে Foundation:
let string1 = String(2, radix: 16)
print(string1) // prints: "2"
let string2 = String(211, radix: 16)
print(string2) // prints: "d3"
let string3 = String(211, radix: 16, uppercase: true)
print(string3) // prints: "D3"
Stringএর init(format:_:)ইনিশিয়ালাইজার ব্যবহার করা হচ্ছেFoundationউপলব্ধ Stringএকটি init(format:_:)সূচনাকারী। init(format:_:)নিম্নলিখিত ঘোষণা আছে:
init(format: String, _ arguments: CVarArg...)
Stringপ্রদত্ত বিন্যাসের স্ট্রিংটিকে টেম্পলেট হিসাবে ব্যবহার করে আরম্ভ করা কোনও বস্তু ফেরত দেয় যাতে বাকী আর্গুমেন্টের মান পরিবর্তিত হয়।
অ্যাপলের স্ট্রিং প্রোগ্রামিং গাইডটি ফর্ম্যাট স্পেসিফায়ারগুলির একটি তালিকা দেয় যা সমর্থিত Stringএবং NSString। এই ফর্ম্যাট নির্দিষ্টকরণকারীদের মধ্যে, %Xনিম্নলিখিত বিবরণ রয়েছে :
স্বাক্ষরিত 32-বিট পূর্ণসংখ্যার (
unsigned int), 0-9 অঙ্কগুলি এবং বড় হাতের এ-এফ ব্যবহার করে হেক্সাডেসিমালে মুদ্রিত।
নীচের খেলার মাঠের কোডটি কীভাবে একটি Stringউদাহরণ তৈরি করতে পারে যা হেক্সাডেসিমাল বিন্যাসে পূর্ণসংখ্যার মান উপস্থাপন করে তা সহ init(format:_:):
import Foundation
let string1 = String(format:"%X", 2)
print(string1) // prints: "2"
let string2 = String(format:"%02X", 1)
print(string2) // prints: "01"
let string3 = String(format:"%02X", 211)
print(string3) // prints: "D3"
let string4 = String(format: "%02X, %02X, %02X", 12, 121, 255)
print(string4) // prints: "0C, 79, FF"
Stringএর init(format:arguments:)ইনিশিয়ালাইজার ব্যবহার করা হচ্ছেFoundationউপলব্ধ Stringএকটি init(format:arguments:)সূচনাকারী। init(format:arguments:)নিম্নলিখিত ঘোষণা আছে:
init(format: String, arguments: [CVarArg])
Stringপ্রদত্ত বিন্যাসের স্ট্রিংটিকে টেমপ্লেট হিসাবে ব্যবহার করে আরম্ভ করা কোনও বস্তু ফেরত দেয় যাতে ব্যবহারকারীর ডিফল্ট লোকেল অনুসারে অবশিষ্ট আর্গুমেন্টের মান প্রতিস্থাপন করা হয়।
নীচের খেলার মাঠের কোডটি কীভাবে একটি Stringউদাহরণ তৈরি করতে পারে যা হেক্সাডেসিমাল বিন্যাসে পূর্ণসংখ্যার মান উপস্থাপন করে তা সহ init(format:arguments:):
import Foundation
let string1 = String(format:"%X", arguments: [2])
print(string1) // prints: "2"
let string2 = String(format:"%02X", arguments: [1])
print(string2) // prints: "01"
let string3 = String(format:"%02X", arguments: [211])
print(string3) // prints: "D3"
let string4 = String(format: "%02X, %02X, %02X", arguments: [12, 121, 255])
print(string4) // prints: "0C, 79, FF"
উপরের উত্তরগুলি 32 বিট ইন্টের পরিসীমা মানের জন্য সূক্ষ্ম কাজ করে তবে মানটি গড়িয়ে যাওয়ার সাথে সাথে এর মানগুলি কাজ করবে না।
আপনাকে 32 বিট ইন্টের চেয়ে বেশি মানের জন্য দৈর্ঘ্যের সংশোধক ব্যবহার করতে হবে
% x = স্বাক্ষরিত 32-বিট পূর্ণসংখ্যা (স্বাক্ষরযুক্ত স্বাক্ষরিত)
ll = দৈর্ঘ্য সংশোধনকারী উল্লেখ করে যে নিম্নলিখিত ডি, ও, ইউ, এক্স, বা এক্স রূপান্তর নির্দিষ্টকরণটি দীর্ঘ দীর্ঘ বা স্বাক্ষরযুক্ত দীর্ঘ দীর্ঘ যুক্তির ক্ষেত্রে প্রযোজ্য।
let hexString = String(format:"%llX", decimalValue)
Int("hexaString", radix: 16)
সুইফ্ট 5.2.4
let value = 200
let hexString = String(format: "%02X", value)
String s = "0x" + String(n, radix: 16)