বাইনারি থেকে বাইনারি থেকে এএসসিআইআই রূপান্তর সরঞ্জামগুলি ASCII?


31

ASCII কে বাইনারি এবং বাইনারিকে ASCII তে রূপান্তর করার জন্য কোন ভাল সরঞ্জাম?

আমি এমন কিছু আশা করছিলাম:

$ echo --binary "This is a binary message"
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101

বা, আরও বাস্তববাদী:

$ echo "This is a binary message" | ascii2bin
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101

এবং বিপরীত:

$ echo "01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101" | bin2ascii
This is a binary message

পিএস: আমি ব্যাশ ব্যবহার করছি

পিএস 2: আমি আশা করি আমি ভুল বাইনারি পাইনি


আপনি শেষ পর্যন্ত যা করতে চান তা পোস্ট করতে পারেন? কেবলমাত্র খ / সি আমরা যেগুলি সমাধান দিই তা কেবল সংকীর্ণ ব্যবহারের ক্ষেত্রে কাজ করবে এবং আমি বুঝতে পারি যে আপনি এমন কিছু চাইছেন যা আপনি আরও জটিল উপায়ে ব্যবহার করতে চাইবেন এবং প্রদত্ত যে কোনও সমাধান সম্ভবত ব্যর্থ হবে will যে দৃশ্যে।
slm

@ এসএমএল হয়ে গেছে, আমি প্রশ্নটি সম্পাদনা করেছি
আরএসফালকন

আমি এটি নিয়েছি আপনি এলএফ অক্ষরের আউটপুট উপেক্ষা করতে চান echo
স্টাফেন চেজেলাস

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

উত্তর:


36
$ echo AB | perl -lpe '$_=unpack"B*"'
0100000101000010
$ echo 0100000101000010 | perl -lpe '$_=pack"B*",$_'
AB
  • -e expressionperlকোড হিসাবে প্রদত্ত অভিব্যক্তিটি মূল্যায়ন করুন
  • -p: sedমোড অভিব্যক্তি ইনপুটের প্রতিটি লাইনে জন্য মূল্যায়ন করা হয়, লাইন সঞ্চিত বিষয়বস্তু সঙ্গে $_পরিবর্তনশীল এবং মূল্যায়ন পর মুদ্রিত অভিব্যক্তি
  • -l: আরও বেশি পছন্দ sed: সম্পূর্ণ লাইনের পরিবর্তে কেবল রেখার বিষয়বস্তু (যা লাইন ডিলিমিটার ছাড়াই) থাকে $_(এবং আউটপুটটিতে একটি নতুন লাইন যোগ করা হয়)। সুতরাং কোডের বিপরীতে এটি কোড বাদে perl -lpe codeযেমন কাজ করে ।sed codeperlsed
  • unpack "B*"$_ডিফল্টরূপে চলকটিতে কাজ করে এবং এর সামগ্রীটি প্রথম বাইটের সর্বোচ্চ বিট থেকে শেষ বাইটের সর্বনিম্ন বিট পর্যন্ত কিছুটা স্ট্রিং হিসাবে বের করে।
  • packবিপরীত না unpack। দেখুন perldoc -f packবিস্তারিত জানার জন্য।

স্পেস সহ:

$ echo AB | perl -lpe '$_=join " ", unpack"(B8)*"'
01000001 01000010
$ echo 01000001 01000010 | perl -lape '$_=pack"(B8)*",@F'
AB

(এটি ধরে নেয় যে ইনপুটটি 8 বিটের ব্লকগুলিতে রয়েছে (0 প্যাডড))।

এর সাথে unpack "(B8)*", আমরা একসাথে 8 টি বিট বের করি এবং আমরা ফাঁকা স্থানগুলির সাথে ফলাফলযুক্ত স্ট্রিংগুলিতে যোগদান করি join " "


অনেক ধন্যবাদ. আমি পার্লের সাথে কিছুটা পরিচিত তবে বর্ধিত বিবরণগুলি সম্পূর্ণ নতুন যারা পার্ল তাদের জন্য খুব সহায়ক হবে।
যোকাই

23

আপনি xxdASCII এবং বাইনারি থেকে রূপান্তর করতে ব্যবহার করতে পারেন ।

$ echo -n "A" | xxd -b
0000000: 01000001                                               A

$ echo -n "A" | xxd -b | awk '{print $2}'
01000001

ঘাঁটি রূপান্তর

আপনি যদি হেক্স, অক্টাল এবং ডিসেম্বরের মধ্যে কেবল বেস রূপান্তর করতে চান তবে আমি সাধারণত bcএই জাতীয় কাজগুলি করতে বেসিক ক্যালকুলেটর কমান্ড লাইন সরঞ্জাম ( ) ব্যবহার করি। লক্ষ্য করুন যে bcঘাঁটির সঠিক ক্রম সম্পর্কে সর্বদা খুব আকর্ষণীয়: আপনাকে obaseপ্রথমে ফলাফলের বেসটি নির্দিষ্ট করতে হবে , তারপরে আপনার পছন্দটি যুক্ত করুন ibase

$ echo "obase=2; ibase=16; A" | bc
1010

$ echo "obase=16; ibase=2; 1010" | bc
A

xxdচমৎকার লাগবে, বাদে এটি দেখায় যে প্রথম বিরক্তিকর কলাম এবং লাইনটির শেষে বেস ইনপুট।
আরএসফালকন

@ আরএসফালকন - - আমি জানি, আপনি এ awkথেকে মুক্তি পাওয়ার জন্য এটিটি পাইপ করতে পারেন তবে এই ডিসপ্লেটি অক্ষম করতে কোনও সুইচ রয়েছে বলে মনে হয় না। | awk '{print $2}'। অন্যান্য সরঞ্জামও আছে। odএবং hexdump। আমি সেগুলি ব্যবহার করে অন্য একটি পদ্ধতি খুঁজছি।
slm

1
@ আরএসফালকন 7 -p'খাঁটি' আউটপুট পেতে বিকল্পটি ব্যবহার করুন
পিওরফেরেট

আমি ব্যবহার xxd -bপদ্ধতির নিজেকে অবশ্য এক ব্যবহার করতে পারবেন না xxdএকা হওয়া ASCII বাইনারি ফিরে রূপান্তর করবে। তবে, আমি আশঙ্কা করি যে printf 'obase=16;ibase=2;%s\n' "$n" | bc | xxd -p -rরূপান্তর করতে containing n সংখ্যার সাথে সংখ্যার সমন্বয় সহ একটি জাতীয় দৈর্ঘ্যের স্ট্রিং বা আংশিক-কোলনের সাথে পৃথক সংখ্যার একটি স্ট্রিং ব্যবহার করতে হবে fear যদি আপনি গ্যারান্টি দিতে পারেন যে she n আপনার শাঁসের পাটিগণিত ধরণের সাথে খাপ printf '%x\n' $((2#$n)) | xxd -p -r
খায়

আপনি Perl / পাইথন ভালো কিছু ব্যবহার করতে পারেন যদি না
Franki

8

বিসি এবং ব্যাশ ব্যবহার:

#!/bin/bash

chrbin() {
        echo $(printf \\$(echo "ibase=2; obase=8; $1" | bc))
}

ordbin() {
  a=$(printf '%d' "'$1")
  echo "obase=2; $a" | bc
}

ascii2bin() {
    echo -n $* | while IFS= read -r -n1 char
    do
        ordbin $char | tr -d '\n'
        echo -n " "
    done
}

bin2ascii() {
    for bin in $*
    do
        chrbin $bin | tr -d '\n'
    done
}
ascii2bin "This is a binary message"
bin2ascii 01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101

5

বাইনারি ascii তে রূপান্তর করার জন্য শেল সমাধান:

bin2ascii() { { tr -cd 01 | fold -w8; echo; } | sed '1i obase=8; ibase=2' | bc | sed 's/^/\\/' | tr -d '\n' | xargs -0 echo -e; }

2
এটি খাঁটি শেল সমাধান নয়। sed, trএবং bcশেল স্ক্রিপ্টে বহিরাগত প্রোগ্রামগুলি বলা হয়।
ইয়োকাই

4

পাইথনে

[ -~]পাইথন 2 এর পরিসীমাটিতে ASCII টি অক্ষরের জন্য :

>>> import binascii
>>> bin(int(binascii.hexlify('hello'), 16))
'0b110100001100101011011000110110001101111'

পশ্চাদ্দিকে:

>>> n = int('0b110100001100101011011000110110001101111', 2)
>>> binascii.unhexlify('%x' % n)
'hello'

পাইথন ৩.২++ এ:

>>> bin(int.from_bytes('hello'.encode(), 'big'))
'0b110100001100101011011000110110001101111'

পশ্চাদ্দিকে:

>>> n = int('0b110100001100101011011000110110001101111', 2)
>>> n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
'hello'

2

পাইথন 3 ব্যবহার করে:

#!/usr/bin/env python3

import sys


if __name__ == "__main__":
    if len(sys.argv) != 1 and len(sys.argv) <= 3:
        if sys.argv[1] in ('-b', '--binary'):
            n = int(sys.argv[2].replace(' ', ''), 2)
            print(n.to_bytes((n.bit_length() + 7) // 8, 'big').decode())
        if sys.argv[1] in ('-a', '--ascii'):
            print((bin(int.from_bytes(sys.argv[2].encode(), 'big')))[2:])
    else:
        print("Example: decode -b '10000001'")

উদাহরণস্বরূপ "bin2ascii" হিসাবে সংরক্ষিত:

$ bin2ascii -a "Hello, world!"
1001000011001010110110001101100011011110010110000100000011101110110111101110010011011000110010000100001

$ bin2ascii -b 1001000011001010110110001101100011011110010110000100000011101110110111101110010011011000110010000100001  
Hello, world!

0

বেস 64 দ্বারা বাইনারি এনকোডিং

$ echo "This is a binary message" | base64
VGhpcyBpcyBhIGJpbmFyeSBtZXNzYWdlCg==

বেস 64 ডিকোডিং

$ echo "VGhpcyBpcyBhIGJpbmFyeSBtZXNzYWdlCg==" | base64 -d
This is a binary message
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.