Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将十六进制字符串转换为int_C - Fatal编程技术网

C 将十六进制字符串转换为int

C 将十六进制字符串转换为int,c,C,编写一个C函数,该函数接受以null结尾的字符串,其中包含一个十六进制字符串,并返回整数值。您不能调用任何C库函数,除了strlen()来编码该函数。十进制字符串将仅包含从“0”到“9”以及从“A”到“F”的0-4个ASCII字符。不需要错误处理。如果字符串为空,则返回值0 我一直在尝试修正我的错误,但一旦我修正了它们,新的错误就会出现,导致我感到困惑 #include <stdlib.h> /*used for EXIT_SUCCESS */ #include <stdio

编写一个C函数,该函数接受以null结尾的字符串,其中包含一个十六进制字符串,并返回整数值。您不能调用任何C库函数,除了strlen()来编码该函数。十进制字符串将仅包含从“0”到“9”以及从“A”到“F”的0-4个ASCII字符。不需要错误处理。如果字符串为空,则返回值0

我一直在尝试修正我的错误,但一旦我修正了它们,新的错误就会出现,导致我感到困惑

#include <stdlib.h>  /*used for EXIT_SUCCESS */
#include <stdio.h>   /*used for printf */
#include <string.h>  /* used for strlen */
#include <stdbool.h> /* used for bool */
#include <math.h>


unsigned int hexStringTouint(const char str[], int length, int n[])
{
    int i, j;
    int intvalue = 0;
    int digit;
    for(i = (length-1), j = 0; i --, j++)
    {
        if(n[i]>='0' && n[i] <='9')
        {
            digit = n[i] - 0x30;
        }
        else if(n[i]>= 'A' && n[i] <= 'F')
        {
            switch(n[i])
            {
                case 'A': digit = 10; break;
                case 'B': digit = 11; break;
                case 'C': digit = 12; break;
                case 'D': digit = 13; break;
                case 'E': digit = 14; break;
                case 'F': digit = 15; break;
            }
        }
        intvalue += digit*pow(16,j);
    }
    printf("int value is %d\n", intvalue);
    return 0;
}

int main(void)
{
    int i, length, intvalue;
    unsigned char n[] = "";
    printf("Enter your hexadecimal string: ");
    scanf("%c\n", n);
    intvalue = 0;
    length = strlen(n);
    return EXIT_SUCCESS;
}
\include/*用于退出成功*/
#include/*用于printf*/
#include/*用于strlen*/
#include/*用于bool*/
#包括
无符号整数hexStringTouint(常量字符str[],整数长度,整数n[]
{
int i,j;
int值=0;
整数位数;
对于(i=(长度-1),j=0;i--,j++)
{

如果(n[i]>='0'&&n[i]='A'&&n[i]OP的大部分代码都是正确的,但是存在各种编码错误

添加测试条件

// for(i = (length-1), j = 0; i --, j++)
//                         v 
for(i = (length-1), j = 0; i >= 0; i --, j++)
// intvalue += digit*pow(16,j);
intvalue += digit*(1u << (4*j));
无法调用任何C库函数,strlen()除外。

缓冲区太小

// unsigned char n[] = "";
// scanf("%c\n", n);

char n[100] = "";
scanf("%99s", n);
hexStringTouint()

未在
main()
中调用函数

存在其他问题


更简单的方法


for requires 3语句。您错过了中断循环的条件。在您的情况下,(i=(length-1),j=0;i>=0;i--,j++)的条件应该是
可能重复的不使用
pow(16,j)
。使用
1提示:如果
char c
是具有当前六位数字字符的变量:数字
'0'
'9'
的值为
c-'0'
。类似的,数字
'A'
'F'
的值为
c-'A'+0xa
。通常,接受大写字母和小写字母在这种情况下,
toupper(c)
不会造成伤害。(它不会改变任何非字母字符。)总之:
if(isxdigit(c))digit=isdigit(c)?c-'0':toupper(c)-'a'+0xa;
-一行字符…;-)相关:
// unsigned char n[] = "";
// scanf("%c\n", n);

char n[100] = "";
scanf("%99s", n);
unsigned hexStringTouint2(const char *str) {
  unsigned value = 0;
  while (*str) {
    unsigned digit = hexCharTouint(*str);  // tbd code
    value = value*16 + digit;
    str++;
  }
  return value;
}