السلام عليكم ورحمة الله وبركاته
وبعد :
اليوم بإذن الله ستستطيع من خلال الـ
++C تحويل كود ثنائي مكتوب بالهكس (
offset)
إلى نص
ascii يمكنك طبعه على الشاشة أو التصرف به كما تتصرف مع النص العادي
ينبغي أن تعلم عزيز المشاهد أن الـ
byte يمكن تمثيله بـ
8 bits والـ
8 bits يمكن تمثيلها بـ رقمين ست عشرية من الـ
0x00 الى
0xff نصف الـ
8 bits تسمى
nibble وهذا الـ
nibble يمكن تثميله بـ
4 bits أو رقم ست عشري وحيد
ولكي نقوم بعملية التحويل نحن بحاجة لعمل
shifting للبايت 4 خانات ناحية اليمين وناحية اليسار
للتعامل مع الـ
4 bits التي نريدها من الـبايت ونعين قيمتها بالـ
ascii ثم بعد ذلك سنأخذ قيمة الـ
nibble المتوفر لدينا سواءً كان الـ
low أو الـ
high في الـ
byte ونحولها إلى ما يكافئها في جدول ترميز الـ
ascii حيث سيتم تحويله إلى
byte كامل بحكم أن كل حرف في الـ
ascii يشغل بايت واحد
http://en.wikipedia.org/wiki/ASCII
أتمنى وصل المقصود ..
في البداية : عين 3 متغيرات عامة من نوع (
unsigned char) في البرنامج وسمها
A,
B,
C أضف قيمة عشوائية للـ
A - الكود:
-
[LEFT][COLOR="Yellow"]unsigned char A = 0xa1 , B = 0, C = 0 ;
[/COLOR][/LEFT]
في الدالة الرئيسية
أضف أمر طباعة الأحرف أولاً
ثم استدع الدالة وستقوم بتحويل الـ
offsets الى
ascii اطبع الأحرف بعد ذلك ولاحظ الفرق
لتكون دالة الـ
main كما يلي
- الكود:
-
[LEFT][COLOR="DeepSkyBlue"]int main(){
cout << A <convert();
cout << B << C ;
return 0;
}[/COLOR][/LEFT]
الدالة
- الكود:
-
[LEFT][COLOR="DeepSkyBlue"]
void convert()
{
unsigned char X ;
for (int count = 0 ; count <= 1 ; count++){
if (count < 1)
[COLOR="Yellow"]X = A >> 4;[/COLOR]
else{
[COLOR="Yellow"]X = A << 4;
X = X >> 4;[/COLOR]
}
switch(X){
case 0:
X = '0';
break;
case 1:
X = '1';
break;
case 2:
X = '2';
break;
case 3:
X = '3';
break;
case 4:
X = '4';
break;
case 5:
X = '5';
break;
case 6:
X = '6';
break;
case 7:
X = '7';
break;
case 8:
X = '8';
break;
case 9:
X = '9';
break;
case 10:
X = 'a';
break;
case 11:
X = 'b';
break;
case 12:
X = 'c';
break;
case 13:
X = 'd';
break;
case 14:
X = 'e';
break;
case 15:
X = 'f';
break ;
}
if (count < 1)
B = X;
else
C = X;
}
}[/COLOR][/LEFT]
[/CENTER]
الكود النهائي
- الكود:
-
[LEFT][COLOR="White"]//ascii converter
#include
unsigned char A = 0xa1 , B = 0, C = 0 ;
void convert();
using namespace std;
int main(){
cout << A <convert();
cout << B << C ;
return 0;
}
void convert()
{
for (int count = 0 ; count <= 1 ; count++){
unsigned char X ;
if (count < 1)
X = A >> 4;
else{
X = A << 4;
X = X >> 4;
}
switch(X){
case 0:
X = '0';
break;
case 1:
X = '1';
break;
case 2:
X = '2';
break;
case 3:
X = '3';
break;
case 4:
X = '4';
break;
case 5:
X = '5';
break;
case 6:
X = '6';
break;
case 7:
X = '7';
break;
case 8:
X = '8';
break;
case 9:
X = '9';
break;
case 10:
X = 'a';
break;
case 11:
X = 'b';
break;
case 12:
X = 'c';
break;
case 13:
X = 'd';
break;
case 14:
X = 'e';
break;
case 15:
X = 'f';
break ;
}
if (count < 1)
B = X;
else
C = X;
}
}[/COLOR][/LEFT]
ناتج الكود
- الكود:
-
[LEFT][COLOR="Yellow"]
C:\>Asciicoverter
ة
a1
C:\>[/COLOR][/LEFT]
[/CENTER]