#include #include #include #include using namespace std; const int MAXSTR=256; int char2x(unsigned char c) { if (c >= '0' && c <= '9') return (c - '0'); if (c >= 'A' && c <= 'F') return (10 + (c - 'A')); if (c >= 'a' && c <= 'f') return (10 + (c - 'a')); return -1; } int main(int argc, char ** argv) { int answer; unsigned short inval; unsigned char buf[MAXSTR]; unsigned char uval; short sinval; char sval; unsigned char d1, d2; cout << "Requested Conversion?\n\t0: Exit\n\t1: unsigned dec->hex\n" << "\t2: unsigned hex->dec\n\t3: signed dec->hex\n\t4: signed hex->dec\n"; cin >> answer; while (answer) { switch (answer) { case 1: cout << "Enter decimal value in range (0..255): "; cin >> inval; assert (inval < 256); uval = (unsigned char)inval; printf("IN: %3d, OUT: 0x%2.2x\n", uval, uval); break; case 2: cout << "Enter hex value as two character hex digit sequence (00 to FF): "; cin >> buf; assert (char2x(buf[0]) >= 0 && char2x(buf[1]) >= 0); inval = char2x(buf[0]) * 16 + char2x(buf[1]); uval = (unsigned char)inval; printf("IN: 0x%2.2x (%s), OUT: %3d\n", uval, buf, uval); break; case 3: cout << "Enter decimal value in range (-128 .. 127): "; cin >> sinval; assert (sinval < 128 && sinval >= -128); sval = (char)sinval; d2 = sval & 0xf; d1 = (sval >> 4) & 0xf; printf("IN: %3d, OUT: 0x%1.1x%1.1x\n", sval, d1, d2); break; case 4: cout << "Enter hex value as two character hex digit sequence (00 to FF): "; cin >> buf; assert (char2x(buf[0]) >= 0 && char2x(buf[1]) >= 0); inval = char2x(buf[0]) * 16 + char2x(buf[1]); sval = (char)inval; d2 = sval & 0xf; d1 = (sval >> 4) & 0xf; printf("IN: 0x%1.1x%1.1x (%s), OUT: %3d\n", d1, d2, buf, sval); break; default: cout << "Unsupported operation, please enter integer 0 to 4\n"; } cout << "Requested Conversion?\n\t0: Exit\n\t1: unsigned dec->hex\n" << "\t2: unsigned hex->dec\n\t3: signed dec->hex\n\t4: signed hex->dec\n"; cin >> answer; } }