将char *转换为byte

时间:2015-03-27 19:03:23

标签: c string casting byte

我的问题是将char * string转换为byte,例如它是我函数的原型。

bool parseTemp(char *str, float *x, float *y, float *z);

我应该解析char变量并获取值。

char  *str="1427709952";

此整数的十六进制值为0x55192000。所以0x55是一个字节,十进制系统是85。 0x19是一个字节,十进制系统中的值为25。 0x20是一个字节,十进制系统是32。所以我们有三个值90,25,32。我真的不知道,怎么做?

4 个答案:

答案 0 :(得分:1)

我假设你想要从函数中检索字节。使用位操作的可能解决方案:

#include <stdio.h>
#include <stdbool.h>

bool parseTemp(char *str, int *x, int *y, int *z);

int main()
{
    char  *str="1427709952";

    int x, y, z;

    parseTemp(str, &x, &y, &z);

    printf("parsed numbers: %d, %d, %d\n", x, y, z);

    return 0;
}

bool parseTemp(char *str, int *x, int *y, int *z) {
    int number;
    sscanf(str, "%d", &number);

    *x = (number & 0xFF000000) >> 24;
    *y = (number & 0x00FF0000) >> 16;
    *z = (number & 0x0000FF00) >> 8;

    return true;
}

我将float更改为int s。输出应为85, 25, 32

答案 1 :(得分:0)

Google scanf()手册页。您可以使用它转换十六进制输入,使用sprintf()转换十六进制输出。还要检查atoi()stroll()和相关函数。

答案 2 :(得分:0)

我编辑了Anto的代码并使用浮点变量得到了我自己的解决方案。

bool parseTemp(char *str,float *x,float *y,float *z)
{
    int number;
    sscanf(str,"%d",&number);
    int *m=(int *)x;
    int *i=(int *)y;
    int *o=(int *)z;

    *m=(number & 0XFF000000) >> 24;
    *i=(number & 0x00FF0000) >> 16;
    *o=(number & 0x0000FF00) >> 8;

    *x=(float)(*m);
    *y=(float)(*i);
    *z=(float)(*o); 

    if(isdigit(*m)&&isdigit(*i)&&isdigit(*o))
        return true;
    else
        return false;
}

答案 3 :(得分:0)

这是我老师的解决方案。 输入文本为:temp 1427709952; 他一开始就寻找温度,如果它存在,那么他就得到了数字。

bool parseTemp(char *str, float *motor, float *indoor, float *outdoor)
{
char *ptr;
char *nptr;
char tmp[100];
int temp;
bool ret=false;
nptr=strdup(str);
ptr=strtok(nptr, ";");
while(ptr !=NULL){
if(strstr(ptr,"temp")!=NULL){
ret=true;
break;
}
ptr=strtok(NULL, ";");
}
free(nptr);
sscanf(ptr,"%s %d",tmp,&temp);
*motor=(float)((temp&0xff000000)>>24);
*indoor=(float)((temp&0x00ff0000)>>16);
*outdoor=(float)((temp&0x0000ff00)>>8);
return ret;
}