如何将字符串转成字节存储

banmiton 2012-05-10 06:33:32
如题:例如,将字符串"12345678"转成0x12 0x34 0x56 0x78存储?
...全文
225 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jason_Rd_Yang 2012-05-11
  • 打赏
  • 举报
回复
受教了

[Quote=引用 4 楼 的回复:]

C/C++ code
char b[4];
char s[]="12345678";
sscanf(s,"%2x%2x%2x%2x",b,b+1,b+2,b+3);

对于象scanf,sscanf,fscanf;printf,sprintf,fprintf这类函数,C程序员一定要做到“拳不离手,曲不离口。”
[/Quote]
赵4老师 2012-05-11
  • 打赏
  • 举报
回复
char b[4];
char s[]="12345678";
sscanf(s,"%2x%2x%2x%2x",b,b+1,b+2,b+3);

对于象scanf,sscanf,fscanf;printf,sprintf,fprintf这类函数,C程序员一定要做到“拳不离手,曲不离口。”
qq120848369 2012-05-11
  • 打赏
  • 举报
回复
给分就写,不给分自己想把。
liangbch 2012-05-10
  • 打赏
  • 举报
回复
楼主大概是想将2个‘0’到‘9’的字符保存为1个字节来压缩存储吧?下面是完整的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{
char *p="12345678";
//char *p="12005678";
char buff[16];
int i;
if ( strlen(p) & 1)
{
printf("The length of string must be a even number\n");
return 0;
}
for (i=0;i<strlen(p)/2;i++)
{
char t;
t= ((p[2*i]-'0') <<4) + p[2*i+1]-'0';
buff[i]=t;
}
buff[i]=0; //字符串结束标志

for (i=0;i<strlen(buff);i++)
printf("0x%02x ",buff[i]);
return 0;
}


不过,这样做是有问题的,因为ASCII为0的字符在c语言中被解释为字符串结束标记,所以在C语言中,字符串中是不应该出现ASCII为0的字符的。但在本例,如果要表示的字符串含有2个连续的‘0’,如"12005678",那么使用这样的做法,就会丢掉00和‘00'之后的内容,除非你另外记录了字符串的长度。
W170532934 2012-05-10
  • 打赏
  • 举报
回复
自己进行解析字符串,然后保存下来。比如:两个数字保存一位
char c[]="12345678";
for(i=0;i<strlen(c);i+=2)
{
int nTmp = c[i]-'0';
nTmp += (c[i+1]-'0');
}

上面的仅是例子,0x12是十六进制数,表示18,所以你要进行换算

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧