看流星社区

 找回密码
 注册账号
查看: 2170|回复: 4

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

[复制链接]

该用户从未签到

发表于 2015-2-11 10:25:48 | 显示全部楼层 |阅读模式
把一个字符串,比如“B2A6A680”转换成bit存到一个数组char *的数组char * buf里,buf[0] = 0xB2,buf[1] = 0xA6,buf[2] = 0xA6,buf[3] = 0x80.   要怎么转换?

该用户从未签到

发表于 2015-2-11 10:26:08 | 显示全部楼层
char buf[4];
sscanf("B2A6A680", "%x", buf);
*(int*)(buf) = htonl(*(int*)buf);

该用户从未签到

发表于 2015-2-11 10:26:20 | 显示全部楼层
你这个字符串本身和 int 的十六进制表示方式是一样的, 所以直接按十六进制的整数格式 "%x" 来读就可以了.
但是由于你要求 buf[0] = 0xB2, 这个和默认的整数表示方式(大小端的问题)不同, 默认读进来后事 buf[0] = 0x80, buf[3] = 0xB2. 所以我们借助于 socket 中的 htonl 函数来做一次大小端的转换.

该用户从未签到

发表于 2015-2-11 10:26:43 | 显示全部楼层
你的意思是不是把用字符串表示的十六进制转换为用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]);
}

该用户从未签到

发表于 2015-2-11 10:26:57 | 显示全部楼层
#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]);
}
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-20 02:38

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表