这段代码有效,但是我想知道是否有更好的方法可以做到这一点。基本上,我需要测试位,并根据位的状态将适当的一个或多个字符写入字符串。存在空格是因为字符将以固定宽度的字体显示,并且我想防止它们移动。 C或C++很好。

const char* Letters[10] = {"A", "B", "Sl", "St", "R", "L", "U", "D", "RS", "LS"};
const char* Ext[2] = {"X", "Y"};
const char* Spaces[10]  = {" ", " ", "  ", "  ", " ", " ", " ", " ", "  ", "  "};

char str[60];
char FinalString[60];

void MakeBitString(u16 data, u16 dataExt) {

    int x;
    strcpy(str, "");

    for (x = 0; x < 2; x++) {

        //X and Y
        if(dataExt & (1 << x)) {
            strcat(str, Spaces[x]);
        }
        else
            strcat(str, Ext[x]);
    }

    for (x = 0; x < 10; x++) {

        //the rest
        if(data & (1 << x)) {
            strcat(str, Spaces[x]);
        }
        else
            strcat(str, Letters[x]);
    }

    strcpy(FinalString, str);
}

最佳答案

  • 使用std::string代替char *和strcat;
  • 为什么需要带空格的数组?似乎只有一个空间;
  • 您几乎有两个u16参数相同的代码-创建一个小函数并调用两次;
  • 不要在全局变量中写入结果-返回std::string
  • 10-02 03:09
    查看更多