用 sprintf 和 sscanf 函数实现数值数组和字符数组互相转换。
sprintf 把数值转成字符,sscanf 把字符转为数值。
实例:
#include <stdio.h> #include <assert.h> /* * * 名称:Binary2Token * 描述:数值数组转字符数组 * 参数:binary - 数值数组,输入要转换的数值; * len - binary数组里的数值个数(以字节为单位); * token - 字符数组,输出转换后的字符; * size - token数组的空间(以字节为单位)。 * 返回:转成的字符个数,以字节为单位。 */ int Binary2Token(const unsigned char* binary, const int len, char* const token, const int size) { int i, n; printf("--- Binary2Token ---\n"); n = len * 2; assert(n < size); for (i = 0; i < len; i++) sprintf(token + i * 2, "%02X", binary[i]); // 考虑到一个字节数值的前面4个比特位非0的情况,用两个字符的宽度存放每个字节的数值,如果前面4个比特位为0就补'0'。 return n; } /* * * 名称:Token2Binary * 描述:字符数组转数值数组 * 参数:token - 字符数组,输入要转换的字符; * len - token数组里的字符个数(以字节为单位); * binary - 数值数组,输出转换后的数值; * size - binary数组的空间(以字节为单位)。 * 返回:转成的数值个数,以字节为单位。 */ int Token2Binary(const char* token, const int len, unsigned char* const binary, const int size) { const char* p; int i, n, m; char buf[3] = {0,0,0}; printf("--- Token2Binary ---\n"); m = len % 2 ? (len - 1) / 2 : len / 2; assert(m < size); // 为了提高效率,先两个两个字符地转换: for (i = 0; i < m; i++) { p = token + i * 2; buf[0] = p[0]; buf[1] = p[1]; n = 0; sscanf(buf, "%X", &n); binary[i] = n; } // 再转换最后一个字符(如果有): if(len % 2) { buf[0] = p[2]; buf[1] = 0; n = 0; sscanf(buf, "%X", &n); binary[i] = n; i++; } return i; } int main() { const unsigned char BINARY[16] = {0,1,2,3,4,5,6,7,0xFF,9,10,11,12,13,14,15}; int i, n; char token[200]; unsigned char binary[200]; n = Binary2Token(BINARY, 16, token, sizeof(token)); printf("%s\n", token); n = Token2Binary(token, n, binary, sizeof(binary)); for (i = 0; i < n; i++) printf("%d ", binary[i]); printf("\n"); n = Token2Binary("0123456789ABCDEFF", 17, binary, sizeof(binary)); for (i = 0; i < n; i++) printf("%d ", binary[i]); printf("\n"); return 0; }
--- Binary2Token ---
0001020304050607FF090A0B0C0D0E0F
--- Token2Binary ---
0 1 2 3 4 5 6 7 255 9 10 11 12 13 14 15
--- Token2Binary ---
1 35 69 103 137 171 205 239 15