2010-06-12 15 views
23

में स्ट्रिंग के लिए BigInteger कन्वर्ट करने के लिए मैं इस प्रकार BigInteger करने के लिए एक String बदल दिया। मैं m.toString() का उपयोग कर रहा हूं लेकिन यह मुझे वांछित परिणाम दे रहा है।कैसे जावा

क्यों ??? बग कहां है और मैं इसके बारे में क्या कर सकता हूं?

+2

अगर मैं अपनी टिप्पणी सही समझते हैं, अपने संदेश नहीं है जरूरी एक संख्या। मुझे लगता है कि हम में से अधिकांश का मानना ​​है कि संदेश एक संख्या का प्रतिनिधित्व करने वाली स्ट्रिंग होने के लिए था (जैसे "12345")। लेकिन आप जो करना चाहते हैं वह "हैलो" को कुछ नंबर में कनवर्ट करना है और फिर मूल स्ट्रिंग को फिर से स्थापित करने में सक्षम होना चाहिए। यह सोचकर कि आप ऐसा क्यों करना चाहते हैं ... आईएमओ कनवर्टिंग स्ट्रिंग को BigInteger में इस तरह से केवल तभी समझ में आता है जब आप परिणामस्वरूप संख्या के साथ गणना करना चाहते हैं, लेकिन फिर इसे वापस परिवर्तित करना समझ में नहीं आता है। मैं क्या खो रहा हूँ? – Axel

+0

वास्तव में आरएसए क्रिप्टोसिस्टम पर एक प्रोग्राम बना रहा है और निश्चित रूप से में मुझे संदेश को बिगइंटर (शिलालेख के दौरान) में परिवर्तित करने की आवश्यकता है और फिर डिस्क्रिप्शन के दौरान रिवर्स प्रक्रिया को बदलने की आवश्यकता है। लेकिन मुझे यह जानने के बिना जवाब देना चाहिए कि मैं ऐसा क्यों कर रहा हूं क्योंकि हर चीज ' यहां समझाया नहीं जा सकता है। – condinya

उत्तर

20

आप BigInteger.toByteArray()

String msg = "Hello there!"; 
BigInteger bi = new BigInteger(msg.getBytes()); 
System.out.println(new String(bi.toByteArray())); // prints "Hello there!" 

तरह से मैं समझता हूँ कि यह है कि आप निम्नलिखित परिवर्तन कर रहे है का उपयोग करना चाहते:

String -----------------> byte[] ------------------> BigInteger 
      String.getBytes()   BigInteger(byte[]) 

और तुम रिवर्स हैं:

BigInteger ------------------------> byte[] ------------------> String 
      BigInteger.toByteArray()   String(byte[]) 

ध्यान दें कि आप शायद String.getBytes() औरके अधिभार का उपयोग करना चाहते हैंजो एक स्पष्ट एन्कोडिंग निर्दिष्ट करता है, अन्यथा आप एन्कोडिंग समस्याओं में भाग ले सकते हैं।

+3

बस आज पहले यह कोशिश की और यह काम नहीं लग रहा है। मैंने कुछ रूपांतरणों के बाद बिगइंटर को पुनर्प्राप्त किया, फिर ऐसा करने का प्रयास किया और यह मुझे एक कचरा अनुक्रम दिया। –

+0

काम नहीं करता !!! –

+0

यह काम नहीं करता है! – user3000430

6

m.toString() या String.valueOf(m) का उपयोग करें। String.valueOf toString() का उपयोग करता है लेकिन शून्य सुरक्षित है।

+0

मैंने दोनों की कोशिश की। अगर मेरा संदेश हैलो तो दोनों तरीकों से मुझे अपना बिगइंटर मूल्य 448378203247 मिलता है। लेकिन मैं चाहता हूं कि हेलो वापस पूर्णांक – condinya

+1

नहीं है यदि बिगइंटर एक स्ट्रिंग का प्रतिनिधित्व करता है तो इसे परिवर्तित करने में कोई मूल्य नहीं लगता है एक बाइट [] या बिगइंटर। आपको ऐसा करने की ज़रूरत क्यों है? – krock

8

आप BigInteger(String) कन्स्ट्रक्टर का उपयोग क्यों नहीं करते? इस तरह, toString() के माध्यम से राउंड-ट्रिपिंग ठीक काम करना चाहिए।

(नोट भी है कि बाइट्स के लिए आपके रूपांतरण स्पष्ट रूप से एक वर्ण-एन्कोडिंग निर्दिष्ट नहीं है और मंच पर निर्भर है - कि दु: ख का स्रोत हो सकता है आगे लाइन नीचे)

+1

यदि मैं BigInteger (स्ट्रिंग) कन्स्ट्रक्टर की तरह उपयोग कर रहा हूं, तो मुझे अपवाद मिल रहा है: java.lang.NumberFormatException – condinya

0

http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html

हर वस्तु है जावा में एक toString() विधि।

+0

मैंने toString() विधि का उपयोग किया लेकिन पाठ में msgstr "पाठ में संदेश छपाई के बजाय यह अपने BigInteger मान को प्रिंट कर रहा है। – condinya

1

उल्टा करने के लिए

byte[] bytemsg=msg.getBytes(); 

आप का उपयोग कर एक BigInteger सिर्फ बातें पेचीदा हो

String text = new String(bytemsg); 

उपयोग कर सकते हैं, वास्तव में यह स्पष्ट नहीं तुम क्यों एक बाइट [] चाहते हैं। BigInteger या बाइट [] के साथ क्या करने की योजना बना रहे हैं? मुद्दा क्या है?

0
String input = "0101"; 
BigInteger x = new BigInteger (input , 2); 
String output = x.toString(2); 
2

स्ट्रिंग के साथ बिगइंटर का निर्माण करते समय, स्ट्रिंग को दशमलव संख्या के रूप में स्वरूपित किया जाना चाहिए। आप अक्षरों का उपयोग नहीं कर सकते हैं, जब तक आप दूसरे तर्क में कोई रेडिक्स निर्दिष्ट नहीं करते हैं, तो आप रेडिक्स में 36 तक निर्दिष्ट कर सकते हैं। 36 आपको अल्फान्यूमेरिक वर्ण केवल [0-9, ए-जेड] देगा, इसलिए यदि आप इसका उपयोग करते हैं, तो आपके पास कोई स्वरूपण नहीं होगा। आप बना सकते हैं: नई BigInteger ("ihavenospaces", 36) फिर वापस कन्वर्ट करने के लिए, एक .toString (36)

का उपयोग लेकिन स्वरूपण रखने के लिए: बाइट [] विधि है कि एक जोड़े को उल्लेखित व्यक्ति का प्रयोग करें।यह डेटा को छोटे आकार में स्वरूपित करने के साथ पैक करेगा, और आपको आसानी से बाइट्स की संख्या को ट्रैक करने की अनुमति देगा

यह आरएसए सार्वजनिक कुंजी क्रिप्टो सिस्टम उदाहरण प्रोग्राम के लिए सही होना चाहिए, मानते हुए कि आप बाइट्स की संख्या को रखते हैं संदेश पीक्यू

की बाइट की संख्या की तुलना में छोटे

(मुझे पता है इस सूत्र पुरानी है)

+0

दिलचस्प विचार! –

5

तुम भी जावा का अंतर्निहित रूपांतरण का उपयोग कर सकते हैं:

BigInteger m = new BigInteger(bytemsg); 
String mStr = "" + m; // mStr now contains string representation of m.