প্রতিধ্বনি একটি বাইট


46

আমি আমার রাসবিবের পাইকে আই 2 সি বাস ব্যবহার করে কিছু প্রদর্শনীতে সংযুক্ত করার চেষ্টা করছি। শুরু করতে আমি ম্যানুয়ালি একটি ফাইলের জন্য স্টাফ, বিশেষত বাইট লিখতে চেয়েছিলাম। আপনি কীভাবে কোনও ফাইলে নির্দিষ্ট বাইট লিখবেন? আমি ইতিমধ্যে এটি পড়েছি এবং আমি অনুভব করেছি যে আমার সমস্যাটি এরকম কিছু দ্বারা সমাধান করা উচিত

echo -n -e \x66\x6f\x6f > byteFileForNow

যাইহোক, যখন আমি ন্যানো সঙ্গে যে ফাইল খুলুন, এর পরিবর্তে foo বিন্যাস আমি দেখুন:

x66x6fx6f

সুতরাং ব্যাকস্ল্যাশগুলি পালানো হয়েছিল, তবে তারা বাইটস নয়। আমিও শুধুমাত্র ছাড়া একই চেষ্টা -e এই সময়, তাই আমি দেখতে exepected করেছি হবে \ x66 \ x6f \ x6f কিন্তু আগের মতই আছে।

সুতরাং প্রতিধ্বনি ব্যাকস্ল্যাশগুলি, ব্যাকস্ল্যাশগুলি একা এবং ব্যাকস্ল্যাশগুলি এড়িয়ে চলেছে যদি তা অনুমিত হয়।
কোন ধারনা কিভাবে এটা ঠিক করতে হবে?
ম্যান-পৃষ্ঠা অনুসারে যেটি আমি সন্ধান করছি তা করা উচিত ছিল।

উত্তর:


65

আপনাকে আপনার কোডগুলি উদ্ধৃতিতে নিতে হবে:

echo -n -e '\x66\x6f\x6f' > byteFileForNow

কারণ অন্যথায় শেল এটিতে \xযাওয়ার xআগে প্রতিস্থাপন করে echo -e

গীত। ডাবল পলায়নও কাজ করবে:

echo -n -e \\x66\\x6f\\x6f > byteFileForNow

যদিও আমি এটি উদ্ধৃতি, ডাবল উদ্ধৃতি দিয়ে কাজ করেছি। আমি নতুন এটি স্পষ্ট কিছু ছিল। ধন্যবাদ!
চিহ্নিত করুন

ইকো (সাধারণত) একটি অন্তর্নির্মিত শেল কমান্ড হিসাবে ঠিক যত্নবান হন। সঠিকভাবে bashহ্যান্ডেল করুন \xHH, তবে সমস্ত শেল এটি করে না।
ওউকি

5

খোল

শেল আপনি ব্যবহার করতে পারেন printf:

printf "%b" '\x66\x6f\x6f' > file.bin

দ্রষ্টব্য: %b- ব্যাকস্ল্যাশ পলায়নের ব্যাখ্যা দেওয়ার সাথে সম্পর্কিত যুক্তিটি মুদ্রণ করুন।

পার্ল

পার্ল সহ, এটি আরও সহজ:

perl -e 'print pack("ccc",(0x66,0x6f,0x6f))' > file.bin

পাইথন

যদি আপনি পাইথন ইনস্টল করেন তবে নিম্নলিখিত ওয়ান-লাইনার ব্যবহার করে দেখুন:

python -c $'from struct import pack\nwith open("file.bin", "wb") as f: f.write(pack("<bbb", *bytearray([0x66, 0x6f, 0x6f])))'


পরীক্ষামূলক:

$ hexdump file.bin 
0000000 66 6f 6f 

1
বা কেবল perl -e 'print pack "c*", 0x66, 0x6f, 0x6f'বাperl -e 'print pack "H*", "666f6f"'
স্টাফেন চেজেলাস

2
নোট যে printf %b '\x66'পোর্টেবল নয়। printf '\x66'কিছুটা বেশি বহনযোগ্য (এর সাথে কাজ করে ksh93, এখনও নয় dashবা এর সাথেও নয় yash) printf '\146\157\157'অথবা printf %b '\0146\0157\0157'বহনযোগ্য / মানক হবে।
স্টাফেন চেজেলাস

2

এটি সরাসরি প্রশ্নের উত্তর নাও দিতে পারে তবে আপনি viহেক্স মোডেও ব্যবহার করতে পারেন :

আপনার ফাইলটি খুলুন এবং টাইপ করুন: হেক্স মোডে স্যুইচ করতে ESC :%!xxd

আপনি হেক্স অংশটি সম্পাদনা করতে সক্ষম হবেন (হেক্স অংশটি পরিবর্তন করার সাথে সাথে পাঠ্যের অংশটি আপডেট হবে না)।

যখন আপনার পুনরায় হিট পালাতে হবে এবং টাইপ করুন: হেক্স মোডে আপনি যে পরিবর্তনগুলি করেছেন তা ফিরে লিখতে ESC :%!xxd -r (পরে সংরক্ষণ করতে ভুলবেন না)।


2

প্রতিটি কমান্ডের জন্য অনলাইন ম্যানুয়ালটিতে প্রচুর তথ্য রয়েছে; কোনও প্রশ্ন ছেড়ে দেওয়া এবং পোস্ট করার আগে এটি সর্বদা নজর রাখা উচিত।

man echoকোনটি পালানোর ক্রমগুলি অনুমোদিত তা ব্যাখ্যা করে। এখানে একটি এক্সট্রাক্ট।

   If -e is in effect, the following sequences are recognized:

   \0NNN  the character whose ASCII code is NNN (octal)

   \\     backslash

   \a     alert (BEL)

   \b     backspace

   \c     produce no further output

   \f     form feed

   \n     new line

   \r     carriage return

   \t     horizontal tab

   \v     vertical tab

সুতরাং 86 x86 ঠিক ভুল। এটি অবশ্যই অষ্টাল হতে হবে এবং আপনার স্ট্রিংটি ডাবল উদ্ধৃতিতে রাখা উচিত, অন্যথায় এটি শেল দ্বারা ব্যাখ্যা করা হবে।

উদাহরণ:

$ echo -e -n "\033\07\017" >tf
$ od -c tf
0000000 033  \a 017
0000003

সম্পাদনা 1

ওকি আমাকে যেমন মনে করিয়ে দিয়েছিল, প্রতিধ্বনিও একটি শেল অন্তর্নির্মিত, সুতরাং তথ্যটি ব্যাশের জন্য ম্যানুয়াল পৃষ্ঠায় রয়েছে man bash; এখানে প্রাসঙ্গিক বিভাগ। তবে শেলটি পিছনে স্ল্যাশ ব্যাখ্যা করে থামাতে আপনার স্ট্রিংয়ের চারপাশে উদ্ধৃতিগুলি ব্যবহার করুন "

   echo [-neE] [arg ...]
          Output  the  args, separated by spaces, followed by a newline.  The return status is always
          0.  If -n is specified, the trailing newline is suppressed.  If the  -e  option  is  given,
          interpretation  of  the  following  backslash-escaped characters is enabled.  The -E option
          disables the interpretation of these escape characters, even  on  systems  where  they  are
          interpreted  by  default.   The  xpg_echo shell option may be used to dynamically determine
          whether or not echo expands these escape characters by default.  echo does not interpret --
          to mean the end of options.  echo interprets the following escape sequences:
          \a     alert (bell)
          \b     backspace
          \c     suppress further output
          \e     an escape character
          \f     form feed
          \n     new line
          \r     carriage return
          \t     horizontal tab
          \v     vertical tab
          \\     backslash
          \0nnn  the eight-bit character whose value is the octal value nnn (zero to three octal dig
                 its)
          \xHH   the eight-bit character whose value is the hexadecimal value HH (one or two hex dig
                 its)

1
জিনিসটি echoসাধারণত একটি বিল্টিন কমান্ড। সুতরাং আপনি যে শেলটি ব্যবহার করছেন এটি এটি। লিনাক্স ডিফল্ট হচ্ছে bash; \xHHহেক্সাডেসিমাল মানের মাধ্যমে একটি চরিত্রটি সঠিকভাবে প্রদর্শিত হচ্ছে।
ওউকি

1
তুমি একেবারে ঠিক, আমার খারাপ। আমার সম্পাদনা 1 আপডেট দেখুন।
এক্স টিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.