读书人

字符数组转换为字符串有关问题

发布时间: 2012-04-04 16:38:51 作者: rapoo

字符数组转换为字符串问题?
char svrlnkcmd[30];
svrlnkcmd[0] = 0x80; //big_edin
svrlnkcmd[1] = 0x01;

svrlnkcmd[2] = 0x00;
svrlnkcmd[3] = 0x00;
svrlnkcmd[4] = 0x00;
svrlnkcmd[5] = 0x09; //包长

svrlnkcmd[6] = 0x01;//协议版本号

如何将 svrlnkcmd 转换为 一个字符串,
总感觉有点 别扭呢, svrlnkcmd本书 是 存储的单个字符,连一起不就成了字符串?
但 字符串 不会出现 svrlnkcmd[2] = 0x00;
svrlnkcmd[3] = 0x00;
svrlnkcmd[4] = 0x00;
那如果将 这个字符数组转换为字符串呢?
貌似 itoa是 将 整型数转换为字符串? 那将 一个字符数组如何 转换为字符串呢?
转换完了后 svrlnkcmd[1] = 0x01; 变成了 30 31吧,又是如何存储的呢?


[解决办法]
你那不是字符数组,是8位有符整数的数组.
作者的意图是在规定协议包内每个字节的内容.
这样是很清晰的.
[解决办法]
0x01就量代表1,并没有ascii码的事.
[解决办法]

C/C++ code
#include<stdio.h>#include<string.h>unsigned char buf[100];unsigned char *svrlnkcmd="\x80\x01\x00\x00\x00\x09\x01";main(){unsigned char *p=svrlnkcmd;sprintf(buf,"%02x%02x%02x%02x%02x%02x%02x", (unsigned)*p,(unsigned)*(p+1),(unsigned)*(p+2),(unsigned)*(p+3),(unsigned)*(p+4),(unsigned)*(p+5),(unsigned)*(p+6));//buf里面的就是你要的ascii码数值.for(p=buf; p<buf+14; p++)printf("0x%02x ", (unsigned)*p);}
[解决办法]
unsigned int n = 6;
unsigned char svrlnkcmd[6];

char *svrlnkstr = (char *) malloc(sizeof(char) * (n * 2 + 1));
int i;

for(i = 0; i < n; i++)
{
svrlnkstr[i * 2] = (svrlnkcmd >> 4)+ 0x30;
svrlnkstr[i * 2 + 1] = (svrlnkcmd && 0x0f) + 0x30;
}
svrlnkstr[n * 2] = '\0';
[解决办法]
记得用完后把svrlnkstr给free掉。或者干脆一开始就用char svrlnkstr[256] = {0};也可以。

读书人网 >C语言

热点推荐