সুইট-এ কীভাবে ইন্টারে হেক্স স্ট্রিং রূপান্তর করা যায়


85

ওবজে-সি-তে আমি স্বাক্ষরবিহীন পূর্ণসংখ্যা n কে একটি হেক্স স্ট্রিং দিয়ে রূপান্তরিত করতাম

 NSString *st = [NSString stringWithFormat:@"%2X", n];

আমি এটি সুইফট ভাষায় অনুবাদ করার জন্য দীর্ঘ সময় চেষ্টা করেছি, তবে ব্যর্থ হয়েছিল।


দ্বারা উত্তর ভিত্তিক stackoverflow.com/users/1187415/martin-r এখানে stackoverflow.com/questions/24986319/... , আপনি কি করতে পারেনString s = "0x" + String(n, radix: 16)
ঝাও

উত্তর:


139

আপনি এখন করতে পারেন:

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"

হেক্স এবং দশমিক সংখ্যাগুলি "7x হেক্সে 123 হ'ল" তে বিপরীত হয়, সুতরাং সেন্ট এক্সপ্রেশনটি সংশোধন করা উচিত: স্ট = "(এন)" + স্ট্রিং (ফর্ম্যাট: "% 2 এক্স", এন) + "হেক্সে"
কেভিন স্লিচ

@ কেভিনস্লিচ, আমি স্বীকার করব যে এটি দ্বিধাগ্রস্ত। আমি এটিকে বোঝাই যেন কোনও ব্যক্তি এসে জিজ্ঞাসা করেছিল, "7 বি কি প্রতিনিধিত্ব করে?", এবং আপনি উত্তর দিতেন "7 বি হেক্সাডেসিমালে লিখিত 123 নম্বর"।
ভ্যাকোয়াম

আমি এই দু'জনকেই একটু দ্বিধাগ্রস্ত মনে করি, বিশেষত এখন আমি উভয়ই ~ 1000 বার পড়েছি। আর একটি উপায় লিখতে হবে: "0x7B = 123d" বা এর মতো কিছু। অস্পষ্টতা সম্ভবত লোকেরা বিকল্প নম্বর সিস্টেমে পারদর্শী নয়।
কেভিন স্লিচ

@ কেভিনস্লিচ, ধন্যবাদ আমি বিবৃতিটি আরও পরিষ্কার করে দিয়েছি।
ওয়াকওমা

4
সুইফট 4-তে আপনাকে "% 2X" এর পরিবর্তে "% 02X" ব্যবহার করতে হবে যদি আপনি প্রয়োজনে "0" নেতৃত্ব দিতে চান ("% 2 এক্স" একটি স্থান সন্নিবেশ করান)
বুবু

54

সুইফটে ঠিক এর জন্য একটি নির্দিষ্ট initপদ্ধতি চালু রয়েছে String:

let hex = String(0xF, radix: 16, uppercase: false)
println("hex=\(hex)") // Output: f

4
আমি কীভাবে এই স্ট্রিংটিকে ইউআইএনটিতে রূপান্তর করতে পারি?
টমসোয়ায়ার

4
আপনি "0xF"একটি রূপান্তর করতে চান UInt?
ধনী

4
let number = UInt("0xF".stringByReplacingOccurrencesOfString("0x", withString:""), radix: 16), numberধরণের হবে UInt?আপনার যদি আরও একটি প্রশ্ন জিজ্ঞাসা করা প্রয়োজন :)
ধনী

String(0xf, radix: 0x10, uppercase: false)
মায়াপ

@ রিচ আমাদের উদ্দেশ্য এনএসএসট্রিংয়ের জন্য এই মূলসূত্র পদ্ধতি আছে?
নরেশ নাল্লামসেটি

39

আপনার প্রয়োজন অনুসারে সুইফট 5 এর সাহায্যে, আপনার সমস্যা সমাধানের জন্য আপনি নিম্নলিখিত তিনটি পদ্ধতির মধ্যে একটি চয়ন করতে পারেন।


# 1 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"

# 2 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"

# 3। 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"

2

ব্যবহার করা

let string2 = String(format:"%02X", 1)
print(string2) // prints: "01"

সুইফট 3 এ আমদানি ফাউন্ডেশন প্রয়োজন হয় না, কমপক্ষে কোনও প্রকল্পেও নয়। স্ট্রিংয়ের এনএসএসস্ট্রিং হিসাবে সমস্ত কার্যকারিতা থাকা উচিত।


1

উপরের উত্তরগুলি 32 বিট ইন্টের পরিসীমা মানের জন্য সূক্ষ্ম কাজ করে তবে মানটি গড়িয়ে যাওয়ার সাথে সাথে এর মানগুলি কাজ করবে না।

আপনাকে 32 বিট ইন্টের চেয়ে বেশি মানের জন্য দৈর্ঘ্যের সংশোধক ব্যবহার করতে হবে

% x = স্বাক্ষরিত 32-বিট পূর্ণসংখ্যা (স্বাক্ষরযুক্ত স্বাক্ষরিত)

ll = দৈর্ঘ্য সংশোধনকারী উল্লেখ করে যে নিম্নলিখিত ডি, ও, ইউ, এক্স, বা এক্স রূপান্তর নির্দিষ্টকরণটি দীর্ঘ দীর্ঘ বা স্বাক্ষরযুক্ত দীর্ঘ দীর্ঘ যুক্তির ক্ষেত্রে প্রযোজ্য।

let hexString = String(format:"%llX", decimalValue)

অনুগ্রহ করে দশকেও হেক্স রূপান্তর করতে কোড যুক্ত করুন।
বরুণ নাহারিয়া

@ ভারুননাহারিয়াInt("hexaString", radix: 16)
লিও ডাবাস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.