java जावा में द्विआधारी में बाइट को कन्वर्ट करें




binary byte (3)

मैं एक बाइट वैल्यू को डेटा ट्रांसफर के लिए बाइनरी में परिवर्तित करने की कोशिश कर रहा हूं। असल में, मैं एक बाइट सरणी में बाइनरी ("10101100") में "एसी" जैसे मान भेज रहा हूं जहां "10101100" एक एकल बाइट है I मैं इस बाइट को प्राप्त करने और इसे "10101100" में परिवर्तित करने में सक्षम होना चाहता हूं। अब तक मुझे कोई सफलता नहीं मिली है, वास्तव में पता है कि कहां से शुरू हो रहा है कोई भी मदद बहुत अच्छी रहेगी।

संपादित करें : सभी भ्रम के लिए क्षमा करें , मुझे नहीं पता था कि मैं विशिष्ट विवरण जोड़ने में भूल गया था।

असल में मुझे सॉकेट कनेक्शन पर बाइनरी मान भेजने के लिए एक बाइट सरणी का उपयोग करना होगा। मैं ऐसा कर सकता हूं, लेकिन मैं मूल्यों को बदलने और उन्हें सही ढंग से कैसे दिखाना जानता हूं। यहाँ एक उदाहरण है:

मुझे हेक्स मूल्य ACDE48 भेजने और इसे वापस व्याख्या करने में सक्षम होने की आवश्यकता है। दस्तावेज़ीकरण के अनुसार, मुझे निम्नलिखित तरीके से बाइनरी में परिवर्तित करना होगा: बाइट [] बी = {10101100,11011110,01001000}, जहां सरणी में प्रत्येक जगह 2 मानों को पकड़ सकता है मुझे तब इन मूल्यों को परिवर्तित करने की आवश्यकता होती है, जब वे भेजे जाते हैं और प्राप्त होते हैं। मुझे यकीन नहीं है कि ऐसा करने के बारे में कैसे जाना जाए


String toBinary( byte[] bytes )
{
    StringBuilder sb = new StringBuilder(bytes.length * Byte.SIZE);
    for( int i = 0; i < Byte.SIZE * bytes.length; i++ )
        sb.append((bytes[i / Byte.SIZE] << i % Byte.SIZE & 0x80) == 0 ? '0' : '1');
    return sb.toString();
}

byte[] fromBinary( String s )
{
    int sLen = s.length();
    byte[] toReturn = new byte[(sLen + Byte.SIZE - 1) / Byte.SIZE];
    char c;
    for( int i = 0; i < sLen; i++ )
        if( (c = s.charAt(i)) == '1' )
            toReturn[i / Byte.SIZE] = (byte) (toReturn[i / Byte.SIZE] | (0x80 >>> (i % Byte.SIZE)));
        else if ( c != '0' )
            throw new IllegalArgumentException();
    return toReturn;
}

यह भी संभाल करने के लिए कुछ सरल तरीके हैं (बड़ा एडीएनआई मानता है)

Integer.parseInt(hex, 16);
Integer.parseInt(binary, 2);

तथा

Integer.toHexString(byte).subString((Integer.SIZE - Byte.SIZE) / 4);
Integer.toBinaryString(byte).substring(Integer.SIZE - Byte.SIZE);

हेक्साइडसीमल को बाइनरी में परिवर्तित करने के लिए, आप अपने कोड को सरल बनाने के लिए बिगइंटेगर का उपयोग कर सकते हैं।

public static void sendHex(OutputStream out, String hexString) throws IOException {
    byte[] bytes = new BigInteger("0" + hexString, 16).toByteArray();
    out.write(bytes, 1, bytes.length-1);
}

public static String readHex(InputStream in, int byteCount) throws IOException {
    byte[] bytes = new byte[byteCount+1];
    bytes[0] = 1;
    new DataInputStream(in).readFully(bytes, 1, byteCount);
    return new BigInteger(0, bytes).toString().substring(1);
}

बाइट्स को अनुवाद के बिना बाइनरी के रूप में भेजा जाता है। यह इसका एकमात्र प्रकार है जिसे किसी एन्कोडिंग के कुछ रूप की आवश्यकता नहीं होती है। ऐसा करने के लिए कुछ भी नहीं है

बाइनरी में एक बाइट लिखने के लिए

OutputStream out = ...
out.write(byteValue);

InputStream in = ...
int n = in.read();
if (n >= 0) {
   byte byteValue = (byte) n;

@ LINEMAN78 के समाधान के लिए वैकल्पिक है:

public byte[] getByteByString(String byteString){
    return new BigInteger(byteString, 2).toByteArray();
}

public String getStringByByte(byte[] bytes){
    StringBuilder ret  = new StringBuilder();
    if(bytes != null){
        for (byte b : bytes) {
            ret.append(Integer.toBinaryString(b & 255 | 256).substring(1));
        }
    }
    return ret.toString();
}




bit