将 char * 转换为 byte
Casting char * to 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。我真的不知道该怎么做?
Google scanf() 手册页。您可以使用它转换十六进制输入,并使用 sprintf() 转换十六进制输出。还要检查 atoi() stroll() 和相关函数。
我假设您想要检索失效的字节。使用位操作的可能解决方案:
#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
s 更改为 int
s。输出应该是 85, 25, 32
.
我编辑了 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;
}
这是我老师的解决方案。
输入文本是:temp 1427709952;
他首先寻找 temp,如果存在,他就会得到号码。
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;
}
我的问题是将 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。我真的不知道该怎么做?
Google scanf() 手册页。您可以使用它转换十六进制输入,并使用 sprintf() 转换十六进制输出。还要检查 atoi() stroll() 和相关函数。
我假设您想要检索失效的字节。使用位操作的可能解决方案:
#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
s 更改为 int
s。输出应该是 85, 25, 32
.
我编辑了 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;
}
这是我老师的解决方案。 输入文本是:temp 1427709952; 他首先寻找 temp,如果存在,他就会得到号码。
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;
}