2012-07-06 16 views
5

स्ट्रिंग में बिट्स (बाइट्स नहीं) या जावा में बिट्स की सरणी कैसे परिवर्तित करें (मैं बाद में कुछ ऑपरेशन करूंगा) और इनट्स की सरणी में कैसे परिवर्तित करें एकस्ट्रिंग को बिट्स में परिवर्तित करने के लिए और फिर int सरणी में कैसे परिवर्तित करें - जावा

string.getBytes(); 
नहीं

सूची, यह है: 32 बिट पूर्णांक में बदल जाते हैं और फिर इसे सरणी में डाल मैं जावा में रूपांतरण के इस प्रकार कभी नहीं किया है

String->array of bits->(some operations I'll handle them)->array of ints 
+3

है कृपया आप क्या पृथ्वी पर क्या कर रहे हैं के बारे में अधिक जानकारी प्रदान। – Wug

+0

मैं जितनी अधिक जानकारी प्रदान करता हूं उतनी जानकारी प्रदान करता हूं। मैं इसे ज्यादा धुंधला नहीं करना चाहता था। – Yoda

+1

यदि आपको अधिक जानकारी के लिए कहा जाता है, तो यह एक संकेत है कि अधिक जानकारी _is_ की आवश्यकता है। –

उत्तर

9
ByteBuffer bytes = ByteBuffer.wrap(string.getBytes(charset)); 
    // you must specify a charset 
IntBuffer ints = bytes.asIntBuffer(); 
int numInts = ints.remaining(); 
int[] result = new int[numInts]; 
ints.get(result); 
+0

धन्यवाद। मैं जितनी जल्दी हो सके इसे देख लूंगा। आशाजनक लग रहा है। (यदि यह बिट्स को बाइट्स प्रदान नहीं करेगा) – Yoda

+0

जैसा कि मैंने अन्य टिप्पणियों में कहा है, जावा में बिट्स प्राप्त करने का वास्तव में कोई तरीका नहीं है कि _doesn't_ केवल बाइट्स या इनट्स या कुछ बड़ा नहीं मिलता है। (उस ने कहा, बिट्स को बाइट्स से आसानी से निकाला जा सकता है।) –

0

आप this के लिए देख रहे हैं?। सरणी लेकिन आप इसे बाद में पूर्णांक में बदलने के लिए भी इसका उपयोग कर सकते हैं।

+0

मेरा मतलब बिट्स था, बाइट्स नहीं;)। – Yoda

+0

आप जावा में शुद्ध बिट नहीं प्राप्त कर सकते हैं। आप केवल उन्हें "थोक में" बाइट्स, इन्स आदि के रूप में प्राप्त कर सकते हैं। –

+1

गंभीरता से, बाइट्स से बिट्स नहीं मिल सकते हैं? :) – Matzi

0

ठीक है, हो सकता है आप बिट्स रूपांतरण के लिए स्ट्रिंग छोड़ सकते हैं और ints की एक सरणी (यदि क्या आप चाहते हैं हर किरदार के यूनिकोड मान है) करने के लिए सीधे परिवर्तित, s.toCharArray() का उपयोग कर जहां s एक String चर रहा है कर सकते हैं।

+0

नहीं, मैं इसे int में परिवर्तित नहीं करना चाहता हूं। मुझे पहले बिट्स पर कुछ ऑपरेशन करने की ज़रूरत है (कुछ बिट्स जोड़ें)। – Yoda

0

यह "abc" को बाइट में परिवर्तित करेगा और फिर कोड संबंधित ASCII कोड (यानी 97 98 99) में "एबीसी" प्रिंट करेगा।

byte a[]=new byte[160]; 
String s="abc"; 
a=s.getBytes(); 
for(int i=0;i<s.length();i++) 
{ 
    System.out.print(a[i]+" "); 
} 
+0

मुझे वह सामान पता है। मुझे बिट्स की आवश्यकता है -> 10101010101 इस तरह की;) – Yoda

0

हो सकता है तो (मैं अपने वर्तमान कंप्यूटर में कोई संकलक है और यदि यह काम का परीक्षण नहीं है, लेकिन यह आप थोड़ा मदद कर सकते हैं):

String st="this is a string"; 
byte[] bytes=st.getBytes(); 
List<Integer> ints=new ArrayList<Integer>(); 
ints.addAll(bytes); 

संकलक

में विफल रहता है
ints.addAll(bytes); 

उसे अपने साथ की जगह ले सकता

for (int i=0;i<bytes.length();i++){ 
    ints.add(bytes[i]); 
} 

और आप बिल्कुल सरणी प्राप्त करना चाहते हैं:

ints.toArray(); 
+0

ओह, क्षमा करें, मैंने आपको गलत समझा है। आप बिट्स प्राप्त करना चाहते हैं। – MikhailSP

0

ध्यान दें कि स्ट्रिंग वर्ण का एक क्रम है, और जावा में प्रत्येक चार डेटा प्रकार एक भी 16-बिट यूनिकोड वर्ण है। इसमें '\ u0000' (या 0) का न्यूनतम मान और '\ uffff' (या 65,535 समावेशी) का अधिकतम मान है। आदेश प्राप्त करने के लिए चार पूर्णांक मान ऐसा करते हैं:

String str="test"; 
    String tmp=""; 

    int result[]=new int[str.length()/2+str.length()%2]; 
    int count=0; 

    for(char c:str.toCharArray()) { 
     tmp+=Integer.toBinaryString((int)c); 
     if(tmp.length()==14) { 
      result[count++]=Integer.valueOf(tmp,2); 
      //System.out.println(tmp+":"+result[count-1]); 
      tmp=""; 
     } 
    } 

    for(int i:result) { 
     System.out.print(i+" "); 
    } 
2

इस उत्तर

String s = "foo"; 
     byte[] bytes = s.getBytes(); 
     StringBuilder binary = new StringBuilder(); 
     for (byte b : bytes) 
     { 
     int val = b; 
     for (int i = 0; i < 8; i++) 
     { 
      binary.append((val & 128) == 0 ? 0 : 1); 
      val <<= 1; 
     } 
     // binary.append(' '); 
     } 
     System.out.println("'" + s + "' to binary: " + binary); 
संबंधित मुद्दे