একটি অক্ষরের জন্য সংখ্যাগত ASCII মান পান


10

আমি একটি শেল স্ক্রিপ্ট লেখার চেষ্টা করছি যা এজেড বা এজেড রেঞ্জের একটি এসসিআইআই চরিত্রের জন্য জিজ্ঞাসা করে এবং এর সমতুল্য সংখ্যাসূচক মান প্রদান করে। উদাহরণস্বরূপ, আউটপুট নিম্নলিখিতগুলির মতো দেখাবে:

scarlet$ Please type a character between A and Z or between a and z:
scarlet$ A       
scarlet$ The decimal value of A is: 65 

আমার প্রচেষ্টা:

#!/bin/bash
echo Enter a letter:
read A
echo -n ${A} | od -i | head -1 | cut -b 10- | tr -d " "

আমি আপনার দ্বিতীয় প্রশ্নটি সম্পাদনা করেছি কারণ এটি সম্পর্কিত নয়; আপনার এটি আলাদাভাবে পোস্ট করা উচিত (আপনি এখানে মূল পাঠ্যটি পেতে পারেন )
মাইকেল মরোজেক

আপনার উদাহরণ আমার জন্য কাজ করে। যা ঘটেছিল তা দেখিয়ে আউটপুট আটকানো এবং ত্রুটিটি কী তা বর্ণনা করতে পারেন? নেই echo -n Aকি আপনি আশা করেন? যদি না হয়, printfপরিবর্তে চেষ্টা করুন। নেই od -iকি আপনি আশা করেন? যদি না হয়, চেষ্টা করুন od -t d1
মাইকেল

1
আমি চেষ্টা করলাম -D1 দুর্দান্ত কাজ করেছি ... ধন্যবাদ
হোস্ট পোস্ট

উত্তর:



8

POSIX:

$ printf %d\\n \'a
97

এটি ব্যাশ ৪.০ এবং তারপরে এবং জেডএস-এ নন-এএসসিআইআই অক্ষরগুলির সাথেও কাজ করে:

$ printf %x\\n \'あ
3042

আপনি recode ..dumpহেক্সাডেসিমাল কোড পয়েন্টগুলি দেখতে ব্যবহার করতে পারেন:

$ printf aあ|recode ..dump
UCS2   Mne   Description

0061   a     latin small letter a
3042   a5    hiragana letter a

2
এটিকে কিছুটা কম "অস্পষ্ট" করার জন্য, কেউ উদাহরণস্বরূপ A=a ; printf '%d\n' "'$A'"এবং কেএসএস-তে কিছু ব্যবহার করতে পারেন A=a; integer N=$(("'$A'")); print $N(প্রিন্ট বা প্রিন্টফের প্রয়োজন হয় না)।
jelmd

3

হতে পারে:

#!/bin/bash

echo -n "Enter a letter:"
read A
echo ${A}|od -t d1|awk '{printf "%s",$2}';echo

চিয়ার্স


আমি শুধু আড়ম্বর ব্যবহার করবো, বরং নাকের চেয়ে। এটি কোনও অ্যাড সংস্করণে বেশ মান।
asoundmove

সম্পাদিত, আমার 'নাক' ব্যবহার করার অভ্যাসটি যেহেতু আমি কাজ করতে প্রস্তুত
হই

হ্যাঁ, আপনার সমাধানটি আমার জন্যও কার্যকর হয়েছে .. ধন্যবাদ
হোস্ট পোস্ট

1

একটি অদ্ভুত-কম সমাধান, কেবল বাশ, এবং কেবল ছোট হাতের অক্ষর। zচরিত্রটি অনুসন্ধান করা হয়েছে, এখানে sঅনুসন্ধান হিসাবে। i=97কারণ ascii (a) = 97। বাকিটা সুস্পষ্ট।

z=s 
i=97
for c in {a..z}
do 
    [ "$c" = "$z" ] && echo $i && break || ((i+=1))
done

আপনি এটি অবশ্যই একক লাইনে লাগাতে পারেন। এখানে কিছু অর্ধবৃত্ত রয়েছে: ;;;;;(যথেষ্ট হওয়া উচিত)


আমি উপরের কোডটি পরীক্ষা করেছি .. তবে এটি আমার পক্ষে কার্যকর হয়নি .. "i + = 1" পাওয়া যায়নি বলে আমি একটি বার্তা পেয়েছি!
হোস্ট পোস্ট

এটি ব্যাশে কাজ করে। পরিবর্তে আপনার প্রয়োজন হতে পারে i = $ ((i + 1))।
ব্যবহারকারী অজানা

এক লাইনে এবং কীবোর্ড থেকে একটি কী পড়ার সাথে:read char; i=97; for c in {a..z}; do [ "$c" = "$char" ] && echo $i && break || ((i+=1)); done
এরিক

0

od -t d1আপনার কাছে থাকলে চেষ্টা করুন । অন্যান্য আউটপুট ফর্ম্যাটগুলি বেশ অদ্ভুত।

আপনার মাথা এবং কাটাও দরকার নেই, উদাহরণস্বরূপ:

printf "A" | od -t d1 | read addr num && echo $num

0

আপনি যদি এমন একটি প্রোগ্রাম চান যা এটি করে এবং আপনি এটি একটি অনুশীলন হিসাবে করছেন না তবে একটি প্রোগ্রাম রয়েছে যা asciiএটি করে। আপনার ডিসট্রো এটি http://www.catb.org/~esr/ascii/ থেকে না পেলে ইতিমধ্যে এটি একটি প্যাকেজ হিসাবে সরবরাহ করতে পারে ।


0
# Get one character per loop, until the user presses <Enter>
while true ; do 
    read -n 1 c
    (( ${#c} == 0 )) && break # Exit the loop. Input length is 0  
                              # ie. The user has pressed Enter
    #
    if [   \( ! "$c" \< "a" -a  ! "$c" \> "z" \) \
        -o \( ! "$c" \< "A" -a  ! "$c" \> "Z" \) ]
    then
        val=($(ascii -s $c)) # build an array of ascii info for this char 
        echo " ... The decimal value of $c is: ${val[1]}"
    else
        echo -n  $'\r \r' # overwrite the invalid character
    fi 
done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.