পূর্ণসংখ্যাটিকে হেক্সাডেসিমাল এবং আবার ফিরে আসুন


461

আমি কীভাবে নিম্নলিখিতগুলি রূপান্তর করতে পারি?

2934 (পূর্ণসংখ্যা) থেকে বি 76 (হেক্স)

আমি কী করার চেষ্টা করছি তা আমাকে ব্যাখ্যা করুন। আমার ডাটাবেসে আমার ব্যবহারকারীর আইডি রয়েছে যা পূর্ণসংখ্যা হিসাবে সঞ্চিত থাকে। ব্যবহারকারীদের আইডি উল্লেখ করার পরিবর্তে আমি তাদের হেক্স মানটি ব্যবহার করতে চাই। এর প্রধান কারণ এটি সংক্ষিপ্ত।

সুতরাং কেবল আমার পূর্ণসংখ্যার থেকে হেক্সে যাওয়ার দরকার নেই, হেক্স থেকে পূর্ণসংখ্যায়ও যেতে হবে।

সি # তে এটি করার সহজ উপায় কি আছে?


65
এফওয়াইআই, আপনি সংখ্যাযুক্ত কীপ্যাড ব্যবহারকারীদের আপত্তিজনক করবেন।
ড্যানিয়েল এ। হোয়াইট

1
আপনার একটি ভাল পয়েন্ট আছে। তবে আমরা পূর্ণসংখ্যার আইডি এমন কিছুতে রূপান্তর করার চেষ্টা করছি যা কম অক্ষর গ্রহণ করে। অন্তর্দৃষ্টি জন্য ধন্যবাদ।
কোডেড

একটি কেতাদুরস্তভাবে বিড়ম্বিত প্রতিক্রিয়া, কিন্তু আপনি কিছুটা Integerসংক্ষিপ্তকরণ বাস্তবায়ন বিবেচনা করেছেন ? যদি ইউজার আইডি যতটা সম্ভব সংক্ষিপ্ত করা সম্ভব হয় তবে আমি জানতে আগ্রহী যে আপনার বিশেষভাবে হেক্সাডেসিমাল রূপান্তরকরণের প্রয়োজন আছে এমন কোনও অন্য কারণ রয়েছে কিনা - যদি না আমি অবশ্যই এটি মিস করি। এটি কি স্পষ্ট এবং জানা (যদি প্রয়োজন হয়) যে ব্যবহারকারীর আইডিগুলি প্রকৃতপক্ষে আসল মূল্যের একটি ষড়যন্ত্র প্রতিনিধি?
WynandB

1
@ কোডেট সংখ্যা হিসাবে স্টোরিং সংখ্যাগুলি এখনও পঠনযোগ্য অবস্থায় কমপক্ষে স্থান গ্রহণ করবে। উদাহরণস্বরূপ, 2bln (পূর্ণসংখ্যা) পর্যন্ত সংখ্যার জন্য 4 বাইট অথবা যদি কোনও সংখ্যার জন্য এটি দীর্ঘ হয় তবে একটি বাইনারি ক্ষেত্র ব্যবহার করুন।
লুক

9
@ ওপুক লুকে দেখুন আমার ডাটাবেসে আমার ব্যবহারকারীর আইডি রয়েছে যা পূর্ণসংখ্যার হিসাবে সংরক্ষণ করা হয়। ব্যবহারকারীদের আইডি উল্লেখ করার পরিবর্তে আমি তাদের হেক্স মানটি ব্যবহার করতে চাই। সুতরাং কোডেট মান হিসাবে একটি int হিসাবে সংরক্ষণ করা হয়, কিন্তু ব্যবহারকারীর জন্য / থেকে হেক্স থেকে রূপান্তর।
18

উত্তর:


853
// Store integer 182
int intValue = 182;
// Convert integer 182 as a hex in a string variable
string hexValue = intValue.ToString("X");
// Convert the hex string back to the number
int intAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

http://www.geekpedia.com/KB8_How-do-I-convert-from-decimal-to-hex-and-hex-to-decimal.html থেকে


179
আপনি অঙ্ক ব্যবহার করে অঙ্কের সংখ্যাও নির্দিষ্ট করতে পারেন: ডেকভ্যালু.টোস্ট্রিং ("এক্স 4")
মার্টিন

78
এই যেহেতু এখানে উল্লেখ করা হয়নি: আপনি যদি lowecase এক্স (যেমন ToString ( "X4) আপনাকে একটি ছোট হাতের অক্ষর ব্যবহার হেক্স মান) পেতে (যেমন b76 ব্যবহার করুন।
Skalli

14
দশকটি একেবারেই দশমিক না হওয়ায় কেবলমাত্র আমিই সেই ভেরিয়েবল নাম "ডেকভ্যালু" সহ্য করতে বেশ কষ্ট পাচ্ছি? দুঃখিত মানুষ, আমি জানি এটি অন্য উত্স থেকে, তবে স্ট্যাকওভারফ্লো এর চেয়ে ভাল হওয়া উচিত।
ক্রিস্টোফার বোনিটজ

8
@ বোনটিজেনেটর লোল, যে উত্তরটি 6 বছরের মধ্যে বিদ্যমান, আমি তা কখনই লক্ষ্য করিনি। আপডেট করা হয়েছে!
গ্যাভিন মিলার

1
নোট করুন যে আপনার হেক্স থেকে ইন্ট সলিউশনটি স্বাক্ষরিত পূর্ণসংখ্যার উত্পাদন করবে এবং 8 হেক্স অক্ষরে ম্যাক্স আউট করবে।
স্কট সলমার

111

ব্যবহার করুন:

int myInt = 2934;
string myHex = myInt.ToString("X");  // Gives you hexadecimal
int myNewInt = Convert.ToInt32(myHex, 16);  // Back to int again.

কীভাবে দেখুন : আরও তথ্য এবং উদাহরণের জন্য হেক্সাডেসিমাল স্ট্রিংস এবং নিউমারিক টাইপের (সি # প্রোগ্রামিং গাইড) মধ্যে রূপান্তর করুন


60

এটিকে হেক্সে রূপান্তর করতে নীচের চেষ্টা করুন

public static string ToHex(this int value) {
  return String.Format("0x{0:X}", value);
}

এবং আবার ফিরে

public static int FromHex(string value) {
  // strip the leading 0x
  if ( value.StartsWith("0x", StringComparison.OrdinalIgnoreCase)) {
    value = value.Substring(2);
  }
  return Int32.Parse(value, NumberStyles.HexNumber);
}

আমি কেন -1 এর প্রাপ্য তা ভয়াবহভাবে নিশ্চিত নই তবে আমার ধারণা আমি কারও ক্ষতিগ্রস্থ হয়েছি।
জারেডপাড়

9
বা "0x" বিট, যা ওপি সত্যিই চায়নি
ফিলিপ লেবায়ার্ট

3
আমি ফর্ম্যাট বানানটি সংশোধন করেছিলাম - তবে নিম্নচোটিত হয়নি। কোনও ব্যাখ্যা ছাড়াই ডাউনভোটগুলি আমাকেও খারাপ করে তোলে ...
স্কট আইভী

ফিলিপিকে, সম্ভবত তবে এটিকে নিচে নামানো খুব নিরীহ বিষয় বলে মনে হচ্ছে। বিশেষত অর্ধেক উত্তর বিবেচনা করে মূলত হেক্স -> ইনট অংশ
জেরেডপাড়

8
(আমি ইতিমধ্যে দুঃখিত আমি মন্তব্য করেছি)। প্রশ্নটি ছিল "আমি কীভাবে 2934 কে বি 76 তে রূপান্তর করব"। অন্যান্য উত্তরগুলি অবশ্যই সমাধানটির অর্ধেক সরবরাহ করে, তবে আপনার রূপান্তরিত "2934" "" 0xB76 "এ রূপান্তরিত হয়েছে। এটি মোটেই খারাপ সমাধান নয়, তবে এটি যে প্রশ্ন করা হয়েছিল তার কোনও উত্তর নয়।
ফিলিপ লেবার্ট

20
int valInt = 12;
Console.WriteLine(valInt.ToString("X"));  // C  ~ possibly single-digit output 
Console.WriteLine(valInt.ToString("X2")); // 0C ~ always double-digit output

19
string HexFromID(int ID)
{
    return ID.ToString("X");
}

int IDFromHex(string HexID)
{
    return int.Parse(HexID, System.Globalization.NumberStyles.HexNumber);
}

যদিও আমি এর মান নিয়ে সত্যই প্রশ্ন করি। আপনি বলেছেন লক্ষ্যটি হ'ল মানকে ছোট করা, যা এটি করবে তবে এটি নিজের পক্ষে লক্ষ্য নয়। আপনার অর্থ হ'ল হয় স্মরণ রাখা সহজ বা টাইপ করা সহজ।

যদি আপনার মনে রাখা সহজ হয় তবে আপনি পিছন দিকে একটি পদক্ষেপ নিচ্ছেন। আমরা জানি এটি এখনও একই আকার, কেবল আলাদাভাবে এনকোড করা। তবে আপনার ব্যবহারকারীরা জানতে পারবেন না যে অক্ষরগুলি 'এ-এফ' এর মধ্যে সীমাবদ্ধ রয়েছে এবং তাই আইডি তাদের জন্য একই ধারণাগুলি স্থান দখল করবে যেন চিঠিটি 'এজেড' অনুমোদিত ছিল। সুতরাং একটি টেলিফোন নম্বর মুখস্থ করার মতো হওয়ার পরিবর্তে এটি একটি জিইউইডি (সমতুল্য দৈর্ঘ্যের) মুখস্থ করার মতো।

আপনি যদি টাইপিং বলতে চাইছেন তবে কিপ্যাড ব্যবহারের পরিবর্তে ব্যবহারকারীকে এখন কীবোর্ডের মূল অংশটি ব্যবহার করতে হবে। এটি টাইপ করা আরও কঠিন হতে পারে কারণ তাদের আঙুলগুলি চিনতে পারে এমন এটি শব্দ নয়।

আরও ভাল বিকল্পটি হ'ল তাদের সত্যিকারের ব্যবহারকারীর নাম বেছে নেওয়া উচিত।


লক্ষ্যটি হ'ল কম অক্ষর গ্রহণ করা। টুইটার নিন উদাহরণস্বরূপ যেখানে তারা কেবলমাত্র 140 টি অক্ষর বার্তাকে মঞ্জুরি দেয়। আমরা অনুরূপ কিছু করছি তাই আমরা আমাদের ব্যবহারকারীদের তাদের আইডি সংক্ষিপ্ত করার একটি উপায় দেওয়ার চেষ্টা করছি trying
কোডেট

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

5
বিলেটেড প্রতিক্রিয়া, তবে - একটি 32 বিট (স্বাক্ষরিত) -এর মধ্যে কখনই নেতিবাচক সংখ্যার সমাধান নেই 31 টি বিট রয়েছে, 16 নয় You আপনি কোনও একটি ইউনিকোড চরিত্রের মধ্যে স্টাফ করতে সক্ষম হতে পারেন, তবে এটি ইউটিএফ 8 এনকোডেড রয়েছে, যদি না 0 এবং 127 এর মধ্যে থাকে এটি হেক্স সমমানের চেয়ে আরও বেশি অক্ষর গ্রহণ করতে চলেছে। এইচএক্স এই সমস্যার জন্য কোনও ভয়াবহ সমাধান নয়, তবে চারটি বাইটের একটি বেস 64 এর চেয়ে ছোটও হবে (এবং আপনি প্যাডিংটি ছাঁটাতে পারেন)
জেমস হার্ট

হ্যাঁ, আমার ঠিক সেখানেই একটি মস্তিষ্ক-উচ্ছ্বাস ছিল। আমি আশা করি আমি একটি মন্তব্য সম্পাদনা করতে পারে।
জোয়েল কোহোর্ন

15

হেক্স থেকে:

string hex = intValue.ToString("X");

অন্তর্নির্মিত:

int intValue = int.Parse(hex, System.Globalization.NumberStyles.HexNumber)

7

আমি এই উত্তরটি খুঁজে পাওয়ার আগে আমি হেক্স স্ট্রিংয়ের সাথে ইন্ট রূপান্তর করার জন্য আমার নিজস্ব সমাধান তৈরি করেছি। আশ্চর্যের বিষয় নয় যে, কোড ওভারহেড কম থাকায় এটি। নেট সমাধানের চেয়ে যথেষ্ট দ্রুত।

        /// <summary>
        /// Convert an integer to a string of hexidecimal numbers.
        /// </summary>
        /// <param name="n">The int to convert to Hex representation</param>
        /// <param name="len">number of digits in the hex string. Pads with leading zeros.</param>
        /// <returns></returns>
        private static String IntToHexString(int n, int len)
        {
            char[] ch = new char[len--];
            for (int i = len; i >= 0; i--)
            {
                ch[len - i] = ByteToHexChar((byte)((uint)(n >> 4 * i) & 15));
            }
            return new String(ch);
        }

        /// <summary>
        /// Convert a byte to a hexidecimal char
        /// </summary>
        /// <param name="b"></param>
        /// <returns></returns>
        private static char ByteToHexChar(byte b)
        {
            if (b < 0 || b > 15)
                throw new Exception("IntToHexChar: input out of range for Hex value");
            return b < 10 ? (char)(b + 48) : (char)(b + 55);
        }

        /// <summary>
        /// Convert a hexidecimal string to an base 10 integer
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        private static int HexStringToInt(String str)
        {
            int value = 0;
            for (int i = 0; i < str.Length; i++)
            {
                value += HexCharToInt(str[i]) << ((str.Length - 1 - i) * 4);
            }
            return value;
        }

        /// <summary>
        /// Convert a hex char to it an integer.
        /// </summary>
        /// <param name="ch"></param>
        /// <returns></returns>
        private static int HexCharToInt(char ch)
        {
            if (ch < 48 || (ch > 57 && ch < 65) || ch > 70)
                throw new Exception("HexCharToInt: input out of range for Hex value");
            return (ch < 58) ? ch - 48 : ch - 55;
        }

সময় কোড:

static void Main(string[] args)
        {
            int num = 3500;
            long start = System.Diagnostics.Stopwatch.GetTimestamp();
            for (int i = 0; i < 2000000; i++)
                if (num != HexStringToInt(IntToHexString(num, 3)))
                    Console.WriteLine(num + " = " + HexStringToInt(IntToHexString(num, 3)));
            long end = System.Diagnostics.Stopwatch.GetTimestamp();
            Console.WriteLine(((double)end - (double)start)/(double)System.Diagnostics.Stopwatch.Frequency);

            for (int i = 0; i < 2000000; i++)
                if (num != Convert.ToInt32(num.ToString("X3"), 16))
                    Console.WriteLine(i);
            end = System.Diagnostics.Stopwatch.GetTimestamp();
            Console.WriteLine(((double)end - (double)start)/(double)System.Diagnostics.Stopwatch.Frequency);
            Console.ReadLine(); 
        }

ফলাফল:

Digits : MyCode : .Net
1 : 0.21 : 0.45
2 : 0.31 : 0.56
4 : 0.51 : 0.78
6 : 0.70 : 1.02
8 : 0.90 : 1.25

1

নেট ফ্রেম ওয়ার্ক

খুব ভালভাবে ব্যাখ্যা করা হয়েছে এবং কয়েকটি প্রোগ্রামিং লাইন ভাল জব

// Store integer 182
int intValue = 182;
// Convert integer 182 as a hex in a string variable
string hexValue = intValue.ToString("X");
// Convert the hex string back to the number
int intAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

পাস্কাল >> সি #

http://files.hddguru.com/download/Software/Seagate/St_mem.pas

পুরানো স্কুল থেকে পাসকালের খুব পুরানো পদ্ধতিটি সি # তে রূপান্তরিত হয়েছে

    /// <summary>
    /// Conver number from Decadic to Hexadecimal
    /// </summary>
    /// <param name="w"></param>
    /// <returns></returns>
    public string MakeHex(int w)
    {
        try
        {
           char[] b =  {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
           char[] S = new char[7];

              S[0] = b[(w >> 24) & 15];
              S[1] = b[(w >> 20) & 15];
              S[2] = b[(w >> 16) & 15];
              S[3] = b[(w >> 12) & 15];
              S[4] = b[(w >> 8) & 15];
              S[5] = b[(w >> 4) & 15];
              S[6] = b[w & 15];

              string _MakeHex = new string(S, 0, S.Count());

              return _MakeHex;
        }
        catch (Exception ex)
        {

            throw;
        }
    }

2
উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ. যদি সম্ভব হয় তবে ইংরেজিতে যতটা সম্ভব আপনি অনুবাদ করুন। যেকোন সম্ভাব্য ব্যাকরণের ভুল সম্পর্কে চিন্তা করবেন না, আমরা সেগুলি সংশোধন করব।
বিসিপিথ


-5

hex to hex:

int a = 72;

কনসোল.ওরাইটলাইন ("{0: X}", ক);

হেক্স টু ইনট:

int b = 0xB76;

Console.WriteLine (খ);

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