請問如何用 C 語言做 HEX 和 BCD 之間的轉換 |
答題得分者是:bernie_w39
|
PSIR
初階會員 發表:106 回覆:51 積分:31 註冊:2008-01-03 發送簡訊給我 |
|
bernie_w39
資深會員 發表:3 回覆:199 積分:280 註冊:2007-10-07 發送簡訊給我 |
有一個作法不錯, 叫作 shift plus 3, 剛才想 google 一下有沒有 source code,
結果沒看到了. 也許是我記錯名字了. 順手寫了一個 C 的程式, 供參考 hex to bcd [code cpp] #include #include typedef union { unsigned int v; unsigned char b[sizeof(unsigned int)]; } data_t; int main(int argc, char **argv) { data_t s, d; int i, j, o; if (argc != 2) { printf("Usage: %s {hex value}\n", argv[0]); return 0; } s.v = o = atoi(argv[1]); // shift-plus-3 d.v = 0; for (i = 0; i < sizeof(d) * 8; i ) { for (j = 0; j < sizeof(d); j ) { if ((d.b[j] 0x30) & 0x80) d.b[j] = 0x30; if ((d.b[j] 0x03) & 0x08) d.b[j] = 0x03; } d.v <<= 1; d.v |= (s.v >> (sizeof(s) * 8 - 1)); s.v <<= 1; } printf("source = %d, destination = %x\n", o, d); return 0; } [/code] bcd to hex [code cpp] #include #include typedef union { unsigned int v; unsigned char b[sizeof(unsigned int)]; } data_t; int main(int argc, char **argv) { data_t s, d; int i, j, o; if (argc != 2) { printf("Usage: %s {hex value}\n", argv[0]); return 0; } s.v = o = atoi(argv[1]); // shift-plus-3 d.v = 0; for (i = 0; i < sizeof(d) * 8; i ) { d.v >>= 1; d.v |= (s.v << (sizeof(s) * 8 - 1)); s.v >>= 1; for (j = 0; j < sizeof(s); j ) { if (s.b[j] & 0x80) s.b[j] -= 0x30; if (s.b[j] & 0x08) s.b[j] -= 0x03; } } printf("source = %x, destination = %d\n", o, d); return 0; } [/code]
編輯記錄
bernie_w39 重新編輯於 2009-03-20 21:01:29, 註解 無‧
|
src
高階會員 發表:1 回覆:94 積分:154 註冊:2005-08-23 發送簡訊給我 |
[code delphi] unsigned char hex_bcd(unsigned char temp) { return ((temp/10)*16) (temp); } unsigned char bcd_hex(unsigned char temp) { return ((temp>>4)*10) (temp&0x0f); } main(void) { unsigned char byte; byte=hex_bcd(12); byte=bcd_hex(0x12); }[/code] ===================引 用 PSIR 文 章=================== 例如現在有一個數值為十進制的 12, 我希望呼叫一個函數運算後變成16進制的 0X12, 反之也可以轉換回來, 請問這是不是所謂的 HEX 和 BCD 的轉換, 如何用 C 語言要如何實現 HEX TO BCD 和 BCD TO HEX 這兩個函數, 謝謝。 |
brent77622
一般會員 發表:2 回覆:3 積分:1 註冊:2009-07-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |