বাইনারি প্রক্রিয়াজাতকরণের জন্য একটি শেলের মতো পরিবেশ


15

এই প্রশ্নটি আমার কাছে কয়েকবার আগে এসেছিল, এখন এই প্রশ্নের জবাবে বাশ উত্তরগুলির স্ট্যান্ডিন থেকে বাইনারি ডেটা অংশের মাধ্যমে লুপটি /programming/993434/ কি- ভাষায়-is- to- binary এ দেওয়া হয়েছে? -as-perl-is-to-পাঠ্যও সন্তোষজনক ছিল না।

বাইনারি ফাইলগুলি I / O পরিচালনা করতে বিশেষভাবে উপযুক্ত স্ক্রিপ্টিং পরিবেশের সন্ধান করছি। আমি জানি যে আমি সম্পূর্ণরূপে প্রোগ্রামিং ভাষার একটি (সি / পাইথন / ...) ব্যবহার করতে পারি তবে তাদের একটি প্রচুর সূচনা এবং কোডিং ওভারহেড রয়েছে (সিটিতে বরাদ্দ এবং ফ্রেড / ফ্রেইট, পাইথনের বিটস্ট্রিংস ...) এগুলি স্ক্রিপ্টিংয়ের জন্য কম উপযুক্ত (এটি থেকে অন্যান্য অ্যাপ্লিকেশনগুলিতে কল করা)। পার্ল এর unpackফাংশন, স্ট্রিং-ওরিয়েন্টেড অপারেশন এবং বোকামি সিনট্যাক্সের সাথে আর ভাল নয় ।

কিছু মত od, তবে ভাষা হিসাবে।

আমি যা প্রত্যাশা করি:

  1. একক স্যুইচ / কমান্ডের সাহায্যে অবিচ্ছিন্নতা সেট বা পরিবর্তন করুন।
  2. অনুরোধ ধরনের সহজ স্পেসিফিকেসন (ব্যাশ ব্যাপ্ত ভালো কিছু read varসঙ্গে int32 var, float varইত্যাদি)।
  3. পাইপের মাধ্যমে বাইনারি হ্যান্ডলিং, নির্দিষ্ট সংখ্যক বাইট বাদ দেওয়া।
  4. স্ট্যান্ডার্ড স্ক্রিপ্টিং প্রবাহ নিয়ন্ত্রণ (এর জন্য / যদি / ...) যা আমরা অভ্যস্ত।

আমি ASCII ফাইলগুলি পরিদর্শন করার সময় যে একই স্বাচ্ছন্দ্য এবং অন্তর্দৃষ্টি দিয়ে কাঁচা তথ্য (ফটোগ্রাফি, বৈজ্ঞানিক তথ্য, অজানা এবং দুর্বল নথিভুক্ত ফর্ম্যাটগুলি) প্রসেস করতে চাই। আমি cএখন ব্যবহার করছি , তবে এটি অ্যাড-হক স্ক্রিপ্টিংয়ের জন্য অনুকূল নয় এবং ইন্টারেক্টিভ হতে পারে না।

কেউ কি এমন একটি সরঞ্জাম জানেন? ক্লিকযোগ্য জিইউআই সফ্টওয়্যার নেই, দয়া করে এটির জন্য অন্যান্য স্ক্রিপ্টগুলি থেকে এসএসএস-এর মাধ্যমে কাজ করা দরকার। "অস্তিত্ব নেই" একটি গ্রহণযোগ্য তবে হতাশাজনক উত্তর।


2
এটি স্টার্টআপ সময়ের ব্যথা সরিয়ে দেয় না, তবে পাইথন ৩.৩ থেকে বাইটগুলি একসাথে প্লাম্বামের সাথে খুব কার্যক্ষম বলে মনে করি: chain = ls["-a"] | grep["-v", "\\.py"] | wc["-l"]; chain()আপনি কি তা দেখেছেন?
অ্যান্থন

আপনি এখন আপনার সি কোডটি নিতে পারেন এবং এটিকে বাশ স্ক্রিপ্টে ব্যবহার করতে পারেন এমন কমান্ড-লাইন সরঞ্জামগুলির একটি সেটে পরিণত করতে পারেন। আপনি শাইন ভেরিয়েবলে বাইনারি রাখতে পারবেন না, আপনি এটি নামযুক্ত ('ফিফো') পাইপগুলিতে স্ট্যাশ করতে পারেন; যতক্ষণ না আপনি সেগুলি পড়তে চান ততক্ষণ তাদের লিখিত সামগ্রী মেমোরিতে থাকবে।
স্বর্ণলোকস

1
আপনার যুক্তিযুক্ত ডাব্লুআরটি অজগর এবং পার্ল, বিটিডাব্লুতে একটি মারাত্মক ত্রুটি রয়েছে। স্বতন্ত্র কমান্ড লাইন সরঞ্জামগুলি সংকলিত করার সময় শেল স্ক্রিপ্টগুলি প্রচুর পরিমাণে কাঁটাচামচ করা হয় না (যদি আপনি ব্যয়বহুল চান, কাঁটাচামচ এটি হয়)। আপনার আলোচনা, অন্যান্য প্রশ্ন, ইত্যাদি, বোঝায় যে আপনি এখানে ডাব্লু / ব্যাশ ব্যবহার করে ভাল হন যদি এটি বাইনারি পরিচালনা করতে পারে। পাইথন এবং পার্ল স্ক্রিপ্ট দুটিই পূর্ব-সংকলিত। আপনি যদি একটি যুক্তিসঙ্গত জটিল অজগর বা পার্ল স্ক্রিপ্ট বনাম একটি সমান্তরাল বাশ স্ক্রিপ্টটিকে মাপদণ্ড করেন, পার্ল বা পাইথন দ্রুততর আকারের ক্রম হবে । আপনি যদি আমাকে বিশ্বাস না করেন তবে বিপরীতে প্রমাণের জন্য ওয়েবে অনুসন্ধান করতে আপনাকে স্বাগতম।
সোনারলোকস

আমি এমন কোনও সরঞ্জাম খুঁজছি যা দ্রুত চলে, আমি এমন কিছু সন্ধান করছি যা আমি দ্রুত কোড করতে পারি can উদাহরণস্বরূপ, যদি আমার কাছে একটি অদ্ভুত প্রোগ্রাম থাকে যা অ্যারে আকারের স্ট্রাক্টগুলির জন্য বাইনারি ইন্ট আউটপুট দেয় (ইন্ট, ফ্লোট, ফ্লোট) এটি অনুসরণ করে, আমি দ্রুত অ্যারের আকার এবং লুপটি পড়তে চাই, সম্ভবত কিছু গণনা করছি সংশ্লেষক বা কয়েকটি উপাদান সর্বাধিক, বা gnuplot প্রসেসিংয়ের জন্য কেবল একটি উপাদানকে ascii কলাম হিসাবে মুদ্রণ করুন। অ্যান্টন: আপনাকে ধন্যবাদ, আমি এ সম্পর্কে জানতাম না, এটি কার্যকর হবে। সোনারিলকস: আমি এড়াতে চেষ্টা করছি তবে আমি কেবল নিজের সরঞ্জামটি লিখতে পারি :)
ওরিন

2
আপনি মত শোনাচ্ছে কিভাবে ব্যবহার করার জন্য একটি টিউটোরিয়াল প্রয়োজন perl'র unpack(ᵔᴥᵔ)
Stéphane Chazelas

উত্তর:


2

আমারও বছরের পর বছর ধরে আপনার চেয়ে ঠিক একই সমস্যা আছে।

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

অবশ্যই পাঠ্য-ভিত্তিক সরঞ্জামগুলির সাহায্যে ডেটা সম্পাদনার xxdআগে এবং xxd -rপরে ব্যবহার করা যেতে পারে , তবে যখন প্রশ্নে থাকা ডেটা বড় হয় এবং এলোমেলো অ্যাক্সেসের প্রয়োজন হয় তখন উদাহরণস্বরূপ, ব্লক ডিভাইসগুলির প্রক্রিয়া করার সময় এটি কাজ করবে না।

(দ্রষ্টব্য: উইন্ডোজের পক্ষে কমপক্ষে ব্যয়বহুল, স্বত্বাধিকারী উইনহেক্স স্ক্রিপ্টিং ভাষা রয়েছে তবে এটি আমাদের কোথাও পাবেন না))

আরও জটিল বাইনারি সম্পাদনা করার জন্য, আমি সাধারণত পাইথনে ফিরে যাই, যদিও এটি কখনও কখনও বড় ফাইলগুলির জন্য খুব ধীর হয়, যা এটি প্রধান অসুবিধা। আমি আশা করি পাইস্টন (অপ্টিমাইজড মেশিন কোড সংকলনের জন্য পাইথন এলএলভিএম নিযুক্ত করে) একদিন ব্যবহারযোগ্য হওয়ার জন্য যথেষ্ট পরিপক্ক হবে, বা আরও ভাল, কেউ একটি ফ্রি কমপ্যাক্ট, দ্রুত এবং বহুমুখী বাইনারি প্রসেসিং স্ক্রিপ্টিং ল্যাঙ্গুয়েজ ডিজাইন এবং বাস্তবায়ন করবে, যার জন্য এএফআইকে বিদ্যমান নেই ইউ * আইএক্স এখনও সিস্টেমের মতো।

হালনাগাদ

আমি হোমব্রিউ, ওপেন সোর্স ইন্টেল x86 এসেম্বাব্লার ব্যবহার করতে পারি হোমব্রিউ ফ্ল্যাট এসেম্ব্লারার বা সংক্ষেপে ফাস্টম ব্যবহার করতে চাই যা কেবল এসেম্ব্লারিংয়ের চেয়ে অনেক বেশি রূপান্তরিত হয়েছিল।

এটি একটি শক্তিশালী, টেক্সটব্লক-ভিত্তিক ম্যাক্রো প্রিপ্রোসেসর (নিজেই একটি টুরিং সম্পূর্ণ ভাষা) বোরল্যান্ড টার্বো এসেম্বলার ম্যাক্রো ভাষার traditionতিহ্যের একটি বাক্য গঠন সহ, তবে আরও উন্নত।

এছাড়াও, এটিতে একটি ডেটা ম্যানিপুলেশন ভাষা রয়েছে, যা বাইনারিগুলিকে স্বেচ্ছাসেবী ফাইল অন্তর্ভুক্ত করতে সক্ষম করে, "কম্পাইল সময়" এ (কেবলমাত্র পূর্ণসংখ্যার) উপর বাইনারি এবং পাটিগণিত ম্যানিপুলেশন করতে এবং ফলাফলকে আউটপুট ফাইলে লিখতে দেয়। এই ডেটা ম্যানিপুলেশন ভাষার কন্ট্রোল স্ট্রুচার রয়েছে এবং এটি সম্পূর্ণ ট্যুরও করে।

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

এটিতে কিছু রাফ প্রান্ত রয়েছে, যেমন

  1. একমত না

  2. 32 বিট x86 অ্যাসেমব্লিতে লিখিত হচ্ছে (যদিও x86_64 তে কাজ করে), আপনার যদি সম্ভবত x86 বা x86_64 ব্যতীত অন্য কোনও কিছুতে চালাতে চান তবে আপনাকে কিউমু বা অনুরূপ এমুলেটর প্রয়োজন need

  3. এটি শক্তিশালী ম্যাক্রো প্রিপ্রেসেসর ল্যাঙ্গুয়েজ সম্পূর্ণরূপে ট্যুরিং করছে, এর অর্থ লিস্প, হাস্কেল, এক্সএসএলটি, বা সম্ভবত এম 4 এর মতো সেরা পছন্দ হতে পারে এমন ভাষাগুলির সাথে আপনার কিছু অভিজ্ঞতা থাকতে পারে।

  4. আউটপুট ফাইলে লিখতে হবে এমন সমস্ত ডেটা মেমরির "ফ্ল্যাট" বাফারে সঞ্চালিত হয় এবং আউটপুট ফাইলটি লেখা এবং দ্রুত শেষ না হওয়া পর্যন্ত এই বাফারটি বৃদ্ধি পেতে পারে তবে সঙ্কুচিত হতে পারে না। এর অর্থ হ'ল যে কোনও একটি আপনার কাছে ফেমের একক চালাতে মূল স্মৃতি রেখে যাওয়ার পরে কেবলমাত্র সর্বোচ্চ ফাইল তৈরি করতে পারে।

  5. দ্রুততম প্রতিটি রানের জন্য ডেটা কেবল একটি একক আউটপুট ফাইলে লেখা যেতে পারে

  6. হ্যাঁ, এটি হোমব্রিউ, সত্যিই ঝরঝরে ও চতুর


2

পার্লের আনপ্যাক দিয়ে আপনাকে অগত্যা "শান্তি" করতে হবে না ... পার্ল সম্পর্কে দুর্দান্ত জিনিসগুলির মধ্যে একটি হ'ল আপনি কীভাবে নিজের পছন্দসই প্যাকেজে নিজের ভাষা তৈরি করতে পার্সার এবং চিহ্ন সারণীটিকে আপত্তি জানাতে পারেন।

এটিই কি মূলত আপনি যা খুঁজছেন?

use MyBinLib;
my $struct= struct(
  pack => 8,
  size => 400,
  fields => [int32('foo','bar','baz'), float32('x1','x2','x3','x4'), int8, int8, int16('z')]
);
while (my $rec= $struct->read(<STDIN>)) {
  printf "x1 = %d, x2 = $d\n", $rec->x1, $rec->x2;
}

অনুশীলনটি তখন মাইবিনলিব প্যাকেজ লেখার জন্য পর্যাপ্ত পার্ল শিখতে হয়। পার্ল ফোরামে জিজ্ঞাসা করুন এবং লোকেরা সম্ভবত সাহায্য করে খুশি হবে।


1

আপনি কি beavএটির সামনে এসে ম্যাক্রোগুলি পেয়েছেন তবে আমি স্ক্রিপ্টিংটি খুঁজে পাইনি,

apt-cache show beav নির্যাস :

বেভের সাহায্যে, আপনি এইচএক্স, এএসসিআইআই, ইবিসিডিআইসি, অক্টাল, ডেসিমাল এবং বিনারিতে একটি ফাইল সম্পাদনা করতে পারেন। আপনি ফ্লোট মোডে ডেটা প্রদর্শন করতে পারবেন না তবে সম্পাদনা করতে পারবেন। আপনি অনুসন্ধান বা অনুসন্ধান এবং এই মোডগুলির যে কোনও একটিতে প্রতিস্থাপন করতে পারেন। ডেটা BYTE, WORD, বা ডাবল ওয়ার্ড ফর্ম্যাটে প্রদর্শিত হতে পারে। ওয়ার্ডস বা ডাবল ওয়ার্ডগুলি প্রদর্শন করার সময় তথ্যটি ইনটেলের বা মোটোরোলার বাইট ক্রমটিতে প্রদর্শিত হতে পারে। যে কোনও দৈর্ঘ্যের ডেটা ফাইলের যে কোনও সময়ে সন্নিবেশ করা যেতে পারে। এই ডেটার উত্স হ'ল কীবোর্ড, অন্য একটি বাফার বা একটি ফাইল। প্রদর্শিত হওয়া যে কোনও ডেটা প্রদর্শিত বিন্যাসে একটি প্রিন্টারে প্রেরণ করা যেতে পারে। মেমরির চেয়ে বড় ফাইলগুলি পরিচালনা করা যায়।

তারপর সেখানে xxdযা বাইনারি / ASCII প্রদর্শন মোডে থেকে / পরিবর্তিত এবং একসাথে মিলিত হতে পারে sedবা viকিন্তু বাইট বৈশিষ্ট্য সোয়াপিং না পেয়েছে।


0

আপনি সর্বদা সোনার জন্য যেতে পারেন এবং সি বা এএসএম তে নেমে যেতে পারেন। আপনি যদি কাঁচা বাইনারি নিয়ে কাজ করছেন তবে এটি সরাসরি রেজিস্টারের বাইরে বাউন্স করুন। আপনি 'ইতিমধ্যে সেখানে' আছেন।

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