我会将用户的十六进制输入转换为buffer
数组,但我不接受它,scanf
不合适。像这样输入数据(0x 06 41 42 43 0f 52 53)。此外,我想将字符串转换为整数类型的数组的一部分。我使用atoi
,最好的方法是什么?
#include <stdio.h>
int main(){
char buffer[1000];
char dest[3];
int x;
//scanf("%s",buffer);
x=atoi(strncpy(dest,buffer+1,4))
}
答案 0 :(得分:0)
以下简单函数将具有十六进制数的字符串转换为整数:
int atox(const char *s)
{
int x= 0;
while (*s) {
x= x*16+(*s>'9'?(toupper(*s)-'A'+10):*s-'0');
s++;
}
return x;
}
并称之为:
printf("%02x\n",atox("42"));
printf("%02x\n",atox("a1"));
printf("%02x\n",atox("A1"));
请注意,字符串必须是要转换的字符串,因此没有空格或其他内容。
答案 1 :(得分:0)
以下是使用strtol
函数的代码,在字符串中将数字视为十六进制(对于base
值8
,它们将是八进制的):
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *s="00 06 41 42 43 0f 52 53";
char *endpoint=s;
int base=16,count=1;
long int result=0;
do
{
result=strtol(endpoint,&endpoint,base);
printf("value %d %ld\n",count,result);
count++;
}while((endpoint - s) < (size_t)strlen(s) );
return 0;
}