Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 strtol的Int数组到字符串_C_String_Int_Strtol - Fatal编程技术网

C strtol的Int数组到字符串

C strtol的Int数组到字符串,c,string,int,strtol,C,String,Int,Strtol,我想去 int sign[8]= {0,1,0,1,0,1,1,1}; 在strtol函数上使用,如 char c = (char) strtol(sign, NULL, 2); printf("%c\n", c); 我不知道如何在strol中使用符号。当我使用 c = (char) strtol("01010111", NULL, 2); 一切都很好,我想得到这样的结果 请帮助:)您需要更改此设置 int sign[8]= {0,1,0,1,0,1,1,1}; 到

我想去

int sign[8]= {0,1,0,1,0,1,1,1};        
在strtol函数上使用,如

char c = (char) strtol(sign, NULL, 2);
printf("%c\n", c);
我不知道如何在strol中使用符号。当我使用

 c = (char) strtol("01010111", NULL, 2);
一切都很好,我想得到这样的结果


请帮助:)

您需要更改此设置

int sign[8]= {0,1,0,1,0,1,1,1}; 

按照您的方式,如果字符
'1'
,则使用ascii值
1
,并且您应该添加一个空终止字节
'\0'
,以便数组可以用作字符串

然后,你可以

char c = (char) strtol(sign, NULL, 2);
printf("%c\n", c);

你需要改变这个

int sign[8]= {0,1,0,1,0,1,1,1}; 

按照您的方式,如果字符
'1'
,则使用ascii值
1
,并且您应该添加一个空终止字节
'\0'
,以便数组可以用作字符串

然后,你可以

char c = (char) strtol(sign, NULL, 2);
printf("%c\n", c);

问题在于符号不是字符串,而是一个小整数数组

您可以直接将它们解释为位,并将数组转换为数字,通过
strtol()
(事实上,按您的方式执行在C中是不习惯的)

只需循环:

unsigned int array_to_int(const int *bits, size_t num_bits)
{
  unsigned int ret = 0, value = 1;
  for(; num_bits > 0; --num_bits, value *= 2)
    ret += value * bits[num_bits - 1];
  return ret;
}

问题在于符号不是字符串,而是一个小整数数组

您可以直接将它们解释为位,并将数组转换为数字,通过
strtol()
(事实上,按您的方式执行在C中是不习惯的)

只需循环:

unsigned int array_to_int(const int *bits, size_t num_bits)
{
  unsigned int ret = 0, value = 1;
  for(; num_bits > 0; --num_bits, value *= 2)
    ret += value * bits[num_bits - 1];
  return ret;
}

可以,但我想知道如何将int符号[8]转换为char符号[8]:(检查了谷歌的一些解决方案,一切都很顺利。)wrong@user2973468你为什么要强制转换?因为我所有的程序都在处理这个int数组,现在我想知道如何将它强制转换/复制到char数组。如果不了解更多信息,就不可能帮助你,你不应该这样做,因为
sizeof(char)!=sizeof(int)
而且它违反了严格的别名规则。你可以从
int*
unsigned char*
用另一种方法,但这只适用于
unsigned char*
AFAIK。或者你可以用
void*
代替。好的,但你能告诉我如何将int-sign[8]={0,1,0,0,0,1,1};复制到char signed[9]={'0','1','0','1','0','1','1','1','\0'};?是的,它可以工作,但我想知道如何从int符号[8]转换为char符号[8]:(检查了谷歌的一些解决方案,一切都很顺利。)wrong@user2973468你为什么要强制转换?因为我所有的程序都在处理这个int数组,现在我想知道如何将它强制转换/复制到char数组。如果不了解更多信息,就不可能帮助你,你不应该这样做,因为
sizeof(char)!=sizeof(int)
而且它违反了严格的别名规则。你可以从
int*
unsigned char*
用另一种方法,但这只适用于
unsigned char*
AFAIK。或者你可以用
void*
代替。好的,但你能告诉我如何将int-sign[8]={0,1,0,0,0,1,1};复制到char signed[9]={'0','1','0','1','0','1','1','1','\0'};?你也可以用位运算符来写。在这种情况下,我认为它更清晰。
ret |=bits[num|bits-1]你也可以用位运算符来写。在这种情况下,我认为它更清晰。
ret |=bits[num| bits-1]