【问题标题】:How to define an array of binary numbers in keil uVision?如何在keil uVision中定义一个二进制数数组?
【发布时间】:2020-12-19 05:20:50
【问题描述】:

我尝试在头文件的数组中添加后缀 'y' 后跟二进制数,但出现“'y' 附近的语法错误,预期的 '}'”。

extern unsigned int A[8]={
00111100y, 
01100110y, 
01100110y, 
01111110y, 
01100110y, 
01100110y, 
01100110y};

【问题讨论】:

  • 只要输入无符号数——计算机只知道二进制,所以它会将每个数分别存储为1s`和0s在内存中...当你使用printf()时,等等..查看十进制表示,您只是查看存储在不同基数中的二进制文件。但是,如果您愿意,您可以正确使用语法,例如Binary, Decimal, HEX, and Octal Constants
  • 但是您在发布的图片中没有正确使用语法。 ',' 运算符并没有按照你的想法做,也没有为数字添加 `\` 的规定。
  • 我在嵌入式系统中使用它,我不想打印它。我本可以使用相应的十进制数字,但我想要一个 8by8 矩阵形状的映射字符。忽略第一个数组,剩下的呢?
  • 请不要显示代码图片。请直接在此处以文本形式提供文本信息。
  • 请直接在此处以文本形式提供minimal reproducible example。它会让事情变得更容易,并允许潜在的回答者自己尝试,而不是要求你尝试。

标签: arrays c binary-data keil


【解决方案1】:

文字图片中的错误可以通过以下方式解决:

  • 使用正确的注释语法:/* ... */(特意提供古代形式)
  • 使用正确的数字语法:66 /* decimal */0x42 /* hexadecimal */
  • 不使用后缀 y,上述格式不需要该后缀

更多错误(上面没有显示,但更有可能陷入陷阱):

  • 避免以 0 开头的数字(在显示的错误中未提及,而是另一个陷阱)
  • 在标题中只声明数组:使用extern但没有= numbers;
  • 在代码中的某处定义数组:不使用extern,而是使用= numbers;

【讨论】:

    【解决方案2】:

    发布的语法不正确。

    不能将某些东西声明为 extern 并在同一语句中对其进行初始化。

    注意:extern 通常表示实际声明在另一个文件上),该文件将与当前文件链接。

    建议:在当前文件中:

    extern unsigned int smiley[8];
    

    在其他文件中:

    unsigned int smiley[8] =
    {
        0, // 00000000
        1, // 00000001
    };
    

    注意大括号'{'和'}'的使用,而不是括号'('')'。

    注意 cmets 开头的斜线的正确“倾斜”(从上到右)。

    y 不是标准 C 语法的一部分。也许它是 kyle 编译器中的一个扩展。但是,在研究 kyle 编译器文档时,我没有找到 y 数据类型。

    【讨论】:

    • 感谢大家抽出宝贵的时间。但您提到的所有修复程序我都知道,并且适用于十进制数字。我关心的是写二进制数组,如 `` unsigned char A[]={ 01101100, 00110110} `` 。在 keil binay 说明符是 'y' 作为后缀和 '0' 作为前缀是八进制说明符。因此,如果我写01101100y,无论是二进制数还是八进制数,编译器都会发生冲突。所以我找不到其他方法来指定二进制数后跟零。这就是我想要的解决方案...
    • 建议:1101100y 并且,如有必要,可以先左后右移动几次以确保高位为 0。注意,应将数字定义为“无符号字符”
    猜你喜欢
    • 2012-03-25
    • 2014-02-28
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2020-11-10
    • 2023-03-23
    • 2016-06-06
    相关资源
    最近更新 更多