'এ' চরিত্রটি কেন 0x41 এর সাথে তুলনা করা হবে?


89

আমি কিছু সি ++ কোড দেখছিলাম এবং নীচের নির্মাণগুলি পেয়েছি:

if('A' == 0x41) {
  // ...
} else if('A' == 0xc1) {
  // ...
} else {
  // ...
}

আমি ভিজ্যুয়াল স্টুডিওর সতর্কবার্তাটি পেয়েছি :

সতর্কতা C4127 শর্তসাপেক্ষ প্রকাশটি ধ্রুবক।

ভিজ্যুয়াল স্টুডিও স্পষ্টভাবে সঠিক - অবশ্যই 'এ' 0x41 হিসাবে সংজ্ঞায়িত করা হয়েছে। লেখক কেন এই কোডটি লেখছেন, প্রদত্ত তিনটি শাখার মধ্যে দুটি ডেড কোড?


30
এগুলি অগত্যা ডেড কোড নয়, চরিত্রের সেটটি পরীক্ষা করার জন্য এটি সম্ভবত একটি বামনীয় উপায়।
জর্জি

60
EBCDIC এ 'এ' = সি 1
হেরোলেড

14
আমি এটিকে কোনও ইউটিলিটি শিরোনামে রেখে দেব #define IS_CHSET_EBCDIC ('A' == 0xc1); বা, আধুনিক সি ++ এ এটি তৈরি করুন constexpr
পিটার - মনিকা

8
@ বি.বুচোল্ড - না, আপনি পিসি থেকে মেইনফ্রেমে সংকলনটি পার করতে পারেন। সুতরাং 'এ' এর অর্থ নির্বাহের অক্ষর সেটটিতে অক্ষরের মান হওয়া উচিত।
বো পারসন

4
দেখে মনে হচ্ছে এটি প্রিপ্রোসেসর শর্তসাপেক্ষ অন্তর্ভুক্তি (উদাহরণস্বরূপ # আইফ 'এ' == 41 ... # লেস ... # এন্ড) ব্যবহার করে এটি করা ভাল যাতে আপনি এর মতো সতর্কতা না পান । কাজ করবে?
টেমপ্লেটিপটিফ

উত্তর:


117

0xc1এর জন্য EBCDICঅক্ষর সেট কোড A। লেখক এই জাতীয় একটি মেশিনের জন্য পরীক্ষা করছেন।

http://www.ibm.com/support/ জ্ঞানসেন্টিটার/en/SSGH4D_15.1.3/com.ibm.xlf1513.aix.doc/language_ref/asciit.html


14
"চরিত্রের সেটটি পরীক্ষা করার জন্য এর চেয়ে ভাল উপায় আর কী আছে?" এটি করার কোনও মানক উপায় নেই। সি 11-তে কিছু ইউনিকোড এনকোডিং ব্যবহার হচ্ছে কিনা তা যাচাই করার একটি উপায় রয়েছে তবে এমএসভিসি এমনকি সি 99 (যা সি 11 এর পূর্বে রয়েছে) পুরোপুরি সমর্থন করবে না। "এই বিকল্প চরিত্র সেটটি কত সাধারণ!" আইবিএম মেইনফ্রেমস ছাড়াও? একদমই না.

4
তাহলে চূড়ান্ত elseশাখা কি জন্য? এএসসিআইআই বা ইবিসিডিআইসির সাথে সামঞ্জস্যপূর্ণ এমন কোনও এখনও ব্যবহারযোগ্য অক্ষর এনকোডিং রয়েছে?
dan04

8
@ dan04 আমি জানি না এমন কিছুই নয় তবে এটি "অজানা এনকোডিং, প্রিন্ট ত্রুটি বার্তা" শাখার মতোই বাস্তব হতে পারে।

8
অ্যাপল II ডস 3.3 অক্ষর এনকোডিংয়েও 'এ' 0xC1, যা ASCII বা 0x80 এর সাথে রয়েছে।
দামিয়ান ইয়ারিক

4
@ রাইময়েড আসলে একটি ভাল সুযোগ রয়েছে যে মাইক্রোসফ্ট সি -৯০ সমর্থন করার আগে মাইক্রোসফ্ট সি 11 বাস্তবায়ন করবে। তারা এমন এক বিক্রেতা ছিলেন যা C99 বৈশিষ্ট্যগুলি প্রয়োগ করতে অসুবিধার বিরুদ্ধে পিছনে ঠেকেছিলেন, এর মধ্যে দুটি সি -11 এ এখন আর বাধ্যতামূলক নয় en.wikedia.org/wiki/…
স্টিভ কক্স

11

প্রথম দর্শনে মনে হতে পারে এটি ডেড কোড তবে 'এ' == 0x41 সর্বদা সত্য হয় না ..

বিকাশকারীরা এখানে যা করার চেষ্টা করেছিল তা আলস্যভাবে খুঁজে পাওয়া যায় যে মেশিনটি ASCII বা EBCDIC এর কোনও বৈকল্পিক বাস্তবায়ন করছে

যেমন @Richard ক্যাপিটাল প্রস্তাব একটি ম্যাপ করা হয় 0xc1 মধ্যে আন্তর্জাতিক - সম্প্রসারিত বাইনারি কোডেড ডেসিমাল ইন্টারচেঞ্জ কোড যদি অন্য 2 শাখায় নিচের টেবিল দেখো ...

এখানে চিত্র বর্ণনা লিখুন

এক্সএমএল-এর জন্য এএসসিআইআই দ্বারা আর একটি ভিন্ন মান খুঁজে পাওয়া যায়:

এখানে চিত্র বর্ণনা লিখুন

তিনি পাশাপাশি করতে পারে:

if('p' == 0x70) {
  // ...
} else if('p' == 0x97) {
  //...
}

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