字符串流与十六进制的转换
2015-11-08 12:42
309 查看
一般效率高的函数都要出输入是十六进制流,但是转换成十六进制后有些字符不可见,这对人来说不太好,所以需要转换。
char get_dec_value(char ch) { if ( ch >= '0' && ch <= '9') return ch - '0'; else if (ch >= 'a' && ch <= 'z') return ch - 'a' + 10; else if (ch >= 'A' && ch <= 'Z') return ch - 'A' + 10; else return -1; } char get_hex_char(char ch) { if (ch >= 0 && ch <= 9) return ch + '0'; else if (ch >= 10 && ch < 16) return ch - 10 + 'A'; else return -1; } int string_to_hex(const char *src, char *dst) { if (NULL == src || NULL == dst) return -1; int len = 0; char ch1, ch2; const char *p = src; while ('\0'!= *p) { ch1 = get_dec_value(*p++); if (ch1 < 0) return -1; ch2 = get_dec_value(*p++); if (ch2 < 0) return -1; if (NULL == dst + len || NULL == dst + len + 1) return -1; *(dst + len) = ch1 * 16 + ch2; *(dst + (++len)) = '\0'; } return 0; } int hex_to_string(const char *src, int src_len, char *dst) { if (NULL == src || NULL == dst) return -1; int i = 0; while (i < src_len) { char ch = *(src + i); *dst++ = get_hex_char((ch & 0xF0) >> 4); if (NULL == dst) return -1; *dst++ = get_hex_char( ch & 0x0F); if (NULL == dst) return -1; *dst = '\0'; i += 1; } return i * 2; }
相关文章推荐
- 【2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest H】【观察找规律 脑洞 构造】Tourist Guide 关键点作端点最多路径
- hdoj 1528 Card Game Cheater 【贪心模拟田忌赛马】
- hdoj 5124 lines 【离散化 + 线段树】
- Codeforces 592D Super M 【求解包含若干个点的最小树 + 树的直径】
- Codeforces 593B Anton and Lines 【思维】
- Codeforces 593A 2Char 【思维】
- Dom4j介绍与接口说明
- IMP-00038:无法转换为环境字符集句柄
- lightoj 1410 - Consistent Verdicts 【思维】
- lightoj 1369 - Answering Queries 【思维】
- lightoj 1354 - IP Checking 【进制水题】
- lightoj 1297 - Largest Box 【函数最值】
- lightoj 1294 - Positive Negative Sign 【基础计数】
- lightoj 1349 - Aladdin and the Optimal Invitation 【中位数的运用】
- lightoj 1311 - Unlucky Bird 【物理基础】
- HDU 5514 Frogs (2015沈阳F题&&容斥+剪枝)
- Linux_NetworkManager_RHEL7
- Oracle dmp文件导入(还原)到不同的表空间和不同的用户下
- 【DirectX 9.0c入门教程】之一 开发环境搭建:安装vs2008 sp1和DirectX SDK
- lightoj 1319 - Monkey Tradition 【CRT】