首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-04-04 
字符数组转换为字符串问题?char svrlnkcmd[30]svrlnkcmd[0] 0x80//big_edinsvrlnkcmd[1] 0x01svrlnkc

字符数组转换为字符串问题?
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};也可以。

热点排行