C - 表示#defines中的二进制文件

时间:2017-06-05 21:24:47

标签: c binary

下面的代码片段按原样工作,但如果我取消注释第一个#define并注释第二个,则编译器抱怨在赋值语句中期望')'。以为它可能想要一个演员,但这没有帮助。请指出我的愚蠢疏忽。

谢谢, JH

//#define SMI_READ  (0b10 << 10)
#define SMI_READ  (0x2 << 10)
    ...
    command |= SMI_READ;

2 个答案:

答案 0 :(得分:3)

一般来说,要回答这样的问题,我们需要查看错误消息的完整和未经编辑的文本,如果您提供完整程序我们可以尝试为自己编译。 (在您看来,错误消息可能毫无用处,但通常只有在您知道如何像编译工程师一样思考时才有意义。)

然而,在这种情况下,我可以做出高可信度的猜测,因为两个宏之间的唯一区别是不工作的那个使用二进制数private class GetUrlContentTask extends AsyncTask<String, Integer, String> { protected String doInBackground(String... urls) { // String content1 = ""; try { URL url = new URL(urls[0]); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setDoOutput(true); connection.connect(); BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream())); String content = "", line; while ((line = rd.readLine()) != null) { content += line + "\n"; } // content1 = content; } catch (Exception e) { e.printStackTrace(); } // return content1; - returns "", wrong return "aaa"; //does not work return content; } protected void onProgressUpdate(Integer... progress) { } protected void onPostExecute(String result) { // this is executed on the main thread after the process is over // update your UI here } } ,并且一个可行的工作使用十六进制数0b10。二进制数字不是C标准的任何版本的一部分,尽管它们是常见的扩展。因此,我推断出您的编译器不支持它们,并在遇到它们时给出一条不清楚的错误消息。

答案 1 :(得分:2)

来自C标准(http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

  

6.4.4.1整数常数
  ...
  八进制常数:
  0
  八进制常数八进制数   ...
  十六进制前缀:中的一个   0x 0X

没有描述其他前缀,特别是没有任何内容会涵盖0b10