我想从ffffffff
函数将hex转换为unsigned int。但我得到的输出为stdlib.h
。
我使用过void main()
{
char str1[33] = "88CC6069E4EDF969773369F988CC969F";
unsigned int hex_int;
hex_int = strtoul(str1, NULL, 16); //converting to unsigned int
printf("%x\n", hex_int);
}
库。
有人可以告诉我,我错了什么部分?
//create "reference to your layout"
LinearLayout yourFormLayout = FindViewById<LinearLayout(Resource.Id.Linear_MS);
//create container for parameters
var parameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent);
//add some parameters
param.SetMargins(20, 20, 20, 10);
//create new element
Button button = new Button(this);
button.Text = "click me";
button.SetBackgroundColor(Android.Graphics.Color.Black);
button.SetTextColor(Android.Graphics.Color.White);
button.LayoutParameters = parameters;
//add some events to your element
button.Click += (sender, e) => DoStuff();
//Add the button
yourFormLayout.AddView(button);
答案 0 :(得分:1)
C11 7.22.1.4p8:
strtol
,strtoll
,strtoul
和strtoull
函数返回转换后的值(如果有)。如果无法执行转换,则返回零。 如果正确的值超出了可表示值的范围,LONG_MIN
,LONG_MAX
,LLONG_MIN
,LLONG_MAX
,ULONG_MAX
或{{1}返回(根据返回类型和值的符号,如果有的话),,宏ULLONG_MAX
的值存储在ERANGE
。
请尝试以下代码:
errno
在我的机器上输出
#include <errno.h> #include <stdio.h> #include <stdlib.h> int main(void) { char str1[] = "88CC6069E4EDF969773369F988CC969F"; errno = 0; // must reset errno first, otherwise it can retain an old value unsigned long int hex_int = strtoul(str1, NULL, 16); if (errno != 0) { perror("strtoul failed:"); } }
你犯了2个错误: strtoul failed: Numerical result out of range
返回的值是strtoul
unsigned
;即使这样,你的值也是128位,大于任何公共平台上的long
。
而且,不要限制unsigned long
的长度 - 它应该至少33个字符;或者使用指向char的指针:
str1
而且,char *str1 = "88CC6069E4EDF969773369F988CC969F";
。
答案 1 :(得分:0)
另一个手册版本:
#include <ctype.h> // To use isdigit(), this function is not necessary if you can use ASCII table
const int asciiNumberBetweenDigitAndAlpha = 7; // see ASCII table
int str2[32];
const int size = sizeof(str1);
for (int i = 0; i < size - 1; i++)
{
if (isdigit(readLine[i]))
str2[i] = str1[i] - '0'; // In ASCII '0' = 48; '1' = 49..
else
str2[i] = str1[i] - '0' - asciiNumberBetweenDigitAndAlpha;
}
你可以使用,作为丑陋else
部分的替代品:
if (str1[i] == 'A')
str2[i] = 10;
else if (str1[i] == 'B')
str2[i] = 11;
...