用 sprintf 和 sscanf 函数实现数值数组和字符数组互相转换

57 篇文章 0 订阅

用 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






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值