【问题标题】:Convert int to byte for GPIO将 int 转换为 GPIO 的字节
【发布时间】:2017-12-21 22:28:29
【问题描述】:

我正在尝试将 int 转换为 4 位数组,以便可以使用树莓派的 GPIO 输出它们。我正在用 C 编程。我目前的功能是:

#include <stdio.h>

char *binaryToAbits(unsigned int answer, char *result) {
  if(answer>1)
  {
    result=binaryToAbits(answer-1,result);
  }
  *result='0'+(answer & 0x01);
  return result+1;
};

int main(void) {
  unsigned int numToConvert=2;
  char ascResult[]={0,0,0,0};
  int i;
  *binaryToAbits(numToConvert,ascResult)='\0';

  for(i=0;i<4;i++)
  {
    if(ascResult[i]!='1') ascResult[i]='0';
  }
  for(i=3;i>=0;i--)
  {
    printf("%c\n",ascResult[i]);
  }
  printf("\n");
  return 0;
}

问题在于阵列的信号计算不正确。

【问题讨论】:

  • 我真的看不出在binaryToAbits() 中使用递归的意义。一个简单的for() 循环会更简单,也可能更快。在任何情况下,您都可以尝试将答案调整为this question
  • 您真的应该尝试制作一个最小的、完整的、可验证的示例 (stackoverflow.com/help/mcve)。特别是你应该解释你期望的结果(可能还有你实际得到的结果)。我对您的 binaryToAbits 的测试给出了合理的结果 - 但您指出此函数的行为错误。
  • 您能否举例说明您的输入是什么样的以及您希望您的输出是什么样的?

标签: c arrays raspberry-pi int converter


【解决方案1】:

使用递归使其变得比必要的复杂。

你可以这样做:

void binaryToAbits(unsigned int input, char *result)
{
    result[0] = (input & 0x1) ? '1' : '0';
    result[1] = (input & 0x2) ? '1' : '0';
    result[2] = (input & 0x4) ? '1' : '0';
    result[3] = (input & 0x8) ? '1' : '0';
}

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2011-09-04
    相关资源
    最近更新 更多