[C语言] 串口控制台----16进制转ASCII码

[复制链接]
1881|8
 楼主| xlsbz 发表于 2014-10-10 08:49 | 显示全部楼层 |阅读模式
想把内存里的数,打印出字符到超级终端。谁有好方法 转换。

网上找了半天没合适的
arefeng 发表于 2014-10-10 16:07 | 显示全部楼层
是单片机的还是PC的?是串口上的内存还是其它区域的内存?
 楼主| xlsbz 发表于 2014-10-10 20:47 来自手机 | 显示全部楼层
单片机啊
ningling_21 发表于 2014-10-10 23:39 | 显示全部楼层
定义一个字符数组
uchar ascii[]={"0123456789ABCDEF"};

随便一个数 c=0X98;

send_char( ascii[c>>4]);//打印高4位
send_char( ascii[c&0x0f]);//打印低4位
hgjinwei 发表于 2014-10-11 21:38 | 显示全部楼层
我都是这么打印内存数据的

  1. #define tst_select(f,v1,v2)     ((f) ? (v1) : (v2))
  2. #define hex2ascii(val)          tst_select((val) < 10, (val) + '0',(val) + ('A' - 10))

  3. /* 调试内存数据打印 */
  4. int __ddump(const char *fix,int len,i_void *pdat)
  5. {
  6.     int         i;
  7.     int         ch;
  8.     int         dump_len;
  9.     uint8      *sp;
  10.    
  11.     extern int lpc22xx_uart_putchar(lpc24xx_uart_t *port,int ch,int timo);
  12. #   define dump_putchar(ch)     lpc22xx_uart_putchar(LPC22XX_UART0,ch,0)
  13.    
  14.    
  15.     os_enter_critical();
  16.     if(NULL != fix){
  17.         printf("%s[%u]:\r\n", fix,len);
  18.     }
  19.    
  20.     for(sp = (uint8*)pdat; len > 0; len -= dump_len,sp += dump_len){
  21.         dump_len = (len >= 16) ? 16: len;
  22.         ch = sp - (uint8*)pdat;
  23.         dump_putchar(hex2ascii(((uint32)ch >>12) & 0xF));
  24.         dump_putchar(hex2ascii(((uint32)ch >> 8) & 0xF));
  25.         dump_putchar(hex2ascii(((uint32)ch >> 4) & 0xF));
  26.         dump_putchar(hex2ascii(((uint32)ch >> 0) & 0xF));
  27.         dump_putchar(':');
  28.         dump_putchar(' ');
  29.         for(i = 0; i < dump_len; i++){
  30.             ch = sp[i];
  31.             dump_putchar(hex2ascii(((uint32)ch >> 4) & 0xF));
  32.             dump_putchar(hex2ascii(((uint32)ch >> 0) & 0xF));
  33.             dump_putchar(' ');
  34.         }
  35.         
  36.         for(; i < 16; i++){
  37.             dump_putchar(' ');
  38.             dump_putchar(' ');
  39.             dump_putchar(' ');
  40.         }
  41.         
  42.         dump_putchar('|');
  43.         dump_putchar(' ');
  44.         for(i = 0; i < dump_len; i++){
  45.             ch = sp[i];
  46.             dump_putchar((ch >= 0x20) ? ch : '.');
  47.         }
  48.         
  49.         dump_putchar('\r');
  50.         dump_putchar('\n');
  51.     }
  52.    
  53.     os_exit_critical();
  54.     return(0);
  55. }
hgjinwei 发表于 2014-10-11 21:51 | 显示全部楼层
运行效果:
__ddump("commom buff",ISS_COMMOM_BUFFER_SIZE,g_iss_commom_buff);

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| xlsbz 发表于 2014-10-11 22:18 来自手机 | 显示全部楼层
恩。手机怎么看不了。应该值得参考
 楼主| xlsbz 发表于 2014-10-11 22:20 来自手机 | 显示全部楼层
hgjinwei 发表于 2014-10-11 21:51
运行效果:
__ddump("commom buff",ISS_COMMOM_BUFFER_SIZE,g_iss_commom_buff);

搞成字符串就能高大上。这很重要。
渤海三叠浪 发表于 2014-10-12 07:20 | 显示全部楼层

  1. void AsciiToHex(const char * ascii, int length, char * hex)
  2. {
  3.         static const char plate[] = "0123456789abcdef";

  4.         for (int i = 0; i < length; i++)
  5.         {
  6.                 hex[i * 2 + 1] = plate[ascii[i] & 0x0F];
  7.                 hex[i * 2] = plate[(ascii[i] >> 4) & 0x0F];
  8.         }
  9. }

  10. void HexToAscii(const char * hex, int length, char * ascii)
  11. {
  12.         for (int i = 0; i < length; i += 2)
  13.         {
  14.                 if (hex[i] >= '0' && hex[i] <= '9')
  15.                         ascii[i / 2] = (hex[i] - '0') << 4;
  16.                 else if (hex[i] >= 'a' && hex[i] <= 'z')
  17.                         ascii[i / 2] = (hex[i] - 'a' + 10) << 4;
  18.                 else if (hex[i] >= 'A' && hex[i] <= 'Z')
  19.                         ascii[i / 2] = (hex[i] - 'A' + 10) << 4;

  20.                 if (hex[i + 1] >= '0' && hex[i + 1] <= '9')
  21.                         ascii[i / 2] += hex[i + 1] - '0';
  22.                 else if (hex[i + 1] >= 'a' && hex[i + 1] <= 'z')
  23.                         ascii[i / 2] += hex[i + 1] - 'a' + 10;
  24.                 else if (hex[i + 1] >= 'A' && hex[i + 1] <= 'Z')
  25.                         ascii[i / 2] += hex[i + 1] - 'A' + 10;
  26.         }
  27. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

190

主题

1614

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部