/ / हिंग में हाइट्स बाइट्स ऑफ स्ट्रिंग - जावा, हेक्स

एक स्ट्रिंग - जावा, हेक्स में बाइट्स का हेक्स प्रतिनिधित्व

मैंने कहीं पढ़ा कि स्ट्रिंग 0123456789ABCDEFFEDCBA987654321089ABCDEF01234567 192 बिट (24) है। यह लिखा है कि यह "बाइट्स का एक हेक्स प्रतिनिधित्व" है

मुझे इस अवधारणा पर मदद चाहिए।

PS: यह ट्रिपलडीईएस एल्गोरिथ्म की गुप्त कुंजी है।

उत्तर:

उत्तर № 1 के लिए 4

हेक्साडेसिमल संख्या में, आपके पास 16 अलग-अलग हैंअंक। दशमलव अंकों के लिए उपयोग किए जाने वाले पहले 10 प्रतीकों का उपयोग करके ये लिखे गए हैं, 0 के माध्यम से। 9. फिर लैटिन वर्णमाला के पहले छह अक्षरों का उपयोग किया जाता है, अर्थात् ए के माध्यम से एफ।

चूंकि प्रत्येक अंक सीमा में एक मूल्य का प्रतिनिधित्व करता है0 एफ के माध्यम से, यानी सोलह संभावनाओं में से एक, यह जानकारी के चार बिट्स रखता है। इस प्रकार, हेक्स अंकों की एक लंबी स्ट्रिंग में, आप जानकारी के बिट्स की कुल संख्या की गणना कर सकते हैं, क्योंकि अंकों की वर्तमान संख्या से सिर्फ चार गुना।

आपका उदाहरण स्ट्रिंग, "0123456789ABCDEFFEDCBA987654321089ABCDEF01234567", 48 अंक है। इसका मतलब यह हेक्साडेसिमल रूप में एक 48 * 4 = 192 बिट संख्या है।

यदि आप बाइट्स के अनुक्रम के रूप में इस बड़ी संख्या को देखने में रुचि रखते हैं, तो बस अंकों के जोड़े लें, क्योंकि प्रत्येक बाइट 8 बिट्स है। पहले (बाएं से गिनती) कुछ बाइट्स फिर बन जाते हैं। 0x01, 0x23, 0x45, और इसी तरह।


जवाब के लिए 2 № 2

यह केवल एक बड़ी संख्या है। आपके द्वारा उपयोग की जाने वाली संख्याओं के बीच एकमात्र अंतर (जैसे कि "192") यह है कि यह प्रयोग करने में लिखा गया है। हेक्साडेसिमल संख्या प्रणाली के बजाय दशमलव संख्या प्रणाली। हेक्साडेसिमल नंबर सिस्टम आपके द्वारा उपयोग किए जाने वाले 10 (0-9) के बजाय 16 अंकों (0-9 और ए-एफ) का उपयोग करता है।

वह विशेष संख्या दशमलव संकेतन में 27898229935051914480226618602452055732231960245295072615 के बराबर है।


जवाब के लिए 2 № 3

जोआचिम ने पहले से ही सैद्धांतिक अवधारणा को समझाया। यदि आप स्वयं जावा में ऐसे नंबरों के साथ खेलना चाहते हैं, तो एक बार देख लें java.math.BigInteger.

उदा।, अपने हेक्साडेसिमल नंबर को दशमलव या किसी अन्य सिस्टम में बदलने के लिए:

// the "radix" is 16 because the string represents a hexadecimal number
BigInteger bi = new BigInteger(
"0123456789ABCDEFFEDCBA987654321089ABCDEF01234567", 16);

// print the number in decimal (digits 0-9)
System.out.println(bi.toString(10));

// print the number in octal (digits 0-7)
System.out.println(bi.toString(8));

उत्तर के लिए 1 № 4
0123456789ABCDEF FEDCBA9876543210 89ABCDEF01234567

3 (हेक्स) कुंजी उर्फ 3 * 8 बाइट्स या3 * 8 * 8 = 192 बिट्स।


उत्तर के लिए 1 № 5

हेक्साडेसिमल में प्रत्येक वर्ण 4 बिट्स से मेल खाता है। तो आपके उदाहरण के लिए, 48 अक्षर और 48 * 4 = 192 बिट्स हैं।


उत्तर के लिए 1 № 6

आपके दूसरे प्रश्न के संबंध में: JVM विभिन्न आधारों में संख्याओं के बीच अंतर कैसे करता है?

यह ऐसा नहीं कर सकता है और न ही कर सकता है! आपको एक प्रोग्रामर के रूप में जेवीएम का समर्थन करना होगा। यदि आप छोटे स्थिरांक निर्दिष्ट करते हैं, तो आप दशमलव, अष्टक या षोडश आधारी आधार के संकेत के लिए एक उपसर्ग का उपयोग करते हैं:

// A leading zero signals a constant in octal base;
// octal 46 is decimal 38
final int n1 = 046;

// A leading "0x" signals a constant in hexadecimal base;
// hex 3f is decimal 63
final int n2 = 0x3f;

// No prefix refers to a regular decimal number
final int n3 = 12;

ऑक्टल, दशमलव और हेक्साडेसिमल आधार के लिए केवल उपसर्ग हैं क्योंकि ये प्रोग्रामर द्वारा सबसे अधिक बार उपयोग किए जाते हैं। ध्यान दें, कि बाइनरी स्थिरांक के लिए कोई उपसर्ग नहीं है!

यदि आप इसका उपयोग करते हैं java.math.BigInteger वर्ग जैसे मैंने अपने पहले प्रश्न के उत्तर में किया था, फिर आपको निर्माणकर्ता में आधार निर्दिष्ट करना होगा:

// input numbers in octal, decimal, and hexadecimal;
// Java needs your help to recognize the base!
final BigInteger b8 = new BigInteger("12345", 8);
final BigInteger b10 = new BigInteger("12345", 10);
final BigInteger b16 = new BigInteger("12345", 16);

// output them in decimal system
System.out.println(b8.toString()); // prints "5349"
System.out.println(b10.toString()); // prints "12345"
System.out.println(b16.toString()); // prints "74565"