C语言字符串转换成byte数组的问题

小菜菜__ 2012-03-31 11:04:05
把一个字符串,比如“B2A6A680”转换成bit存到一个数组char *的数组char * buf里,buf[0] = 0xB2,buf[1] = 0xA6,buf[2] = 0xA6,buf[3] = 0x80. 要怎么转换?
...全文
3229 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyq52088888 2014-08-05
  • 打赏
  • 举报
回复
这个问题有结果吗,上面的好像实现不了啊
小菜菜__ 2012-04-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
你的意思是不是把用字符串表示的十六进制转换为用bit表示的16进制?我是按这个意思写的

C/C++ code

unsigned char fun(char c)/*把用字符表示的十六进制数转换为二进制表示*/
{
if('A' <=c && c <='Z')
return c - 'A' + 10;
if('a'……
[/Quote]

好像是这样的,我也运行了一下,输出的效果也是我想要的,但是还是感觉有点什么不对的感觉
airwolf1216 2012-04-01
  • 打赏
  • 举报
回复
这种问题不难 只是麻烦 用char*游走即可
5t4rk 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

C/C++ code

char buf[4];
sscanf("B2A6A680", "%x", buf);
*(int*)(buf) = htonl(*(int*)buf);
[/Quote]

顶一下 这个 去查查这两个函数 你就知道了
lvjing_CSDN 2012-03-31
  • 打赏
  • 举报
回复
你的意思是不是把用字符串表示的十六进制转换为用bit表示的16进制?我是按这个意思写的

unsigned char fun(char c)/*把用字符表示的十六进制数转换为二进制表示*/
{
if('A' <=c && c <='Z')
return c - 'A' + 10;
if('a' <=c && c <='z')
return c - 'a' + 10;
return c - '0' ;
}
void convert(const char *str, unsigned char *arr)
{
for(unsigned i = 0; str[i] != '\0'; ++i )
if(i%2 == 0){
arr[i/2] = fun(str[i]);
arr[i/2] <<= 4;
}
else
arr[i/2] |= fun(str[i]);
}
www_adintr_com 2012-03-31
  • 打赏
  • 举报
回复
你这个字符串本身和 int 的十六进制表示方式是一样的, 所以直接按十六进制的整数格式 "%x" 来读就可以了.
但是由于你要求 buf[0] = 0xB2, 这个和默认的整数表示方式(大小端的问题)不同, 默认读进来后事 buf[0] = 0x80, buf[3] = 0xB2. 所以我们借助于 socket 中的 htonl 函数来做一次大小端的转换.
小菜菜__ 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
C/C++ code

char buf[4];
sscanf("B2A6A680", "%x", buf);
*(int*)(buf) = htonl(*(int*)buf);
[/Quote]

能不能解释一下?
www_adintr_com 2012-03-31
  • 打赏
  • 举报
回复

char buf[4];
sscanf("B2A6A680", "%x", buf);
*(int*)(buf) = htonl(*(int*)buf);
henut 2012-03-31
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>
int toint (char a) //将字符改为数值
{
int n=0;
if(a>'9') //注意这里我没有写关于字母是大写还是小写判断 //你用小写就会计算错误
n=a-55;
else
n=a-0x30;
return n;
}

void main()
{
char c[]="B2A6A680";
int a[20]={0};
int i;
int j;
j=strlen(c);
for(i=0;i<j;i=i+2)
a[i]=toint(c[i])*16+toint(c[i+1]); //将前后合成一个整体你应该知道吧
for(i=0;i<j;i=i+2)
printf("%x\n",a[i]);
}

69,382

社区成员

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

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