为什么printf(“%c”,1)返回笑脸而不是编码char为1

时间:2016-05-26 08:06:47

标签: c terminal character-encoding printf character

这是我的代码

    public void truncateTable(){
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL("delete from "+ MP_TABLE);
}

    public void insertWriteAudio(HashMap<String, String> queryValues) {
    SQLiteDatabase database = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("id", queryValues.get("Id"));
    values.put("title", queryValues.get("title"));
    values.put("url", queryValues.get("url"));
    database.insert("audios", null, values);
    database.close();
}

    public int getMpAudioRowCount() {
    SQLiteDatabase db = this.getReadableDatabase();
    long cnt  = DatabaseUtils.queryNumEntries(db, MP_TABLE_Audio);
    db.close();
    return (int) cnt;
}

它会回归笑脸。我到处搜索笑脸的代码或1的代码但我没有设法找到任何链接或任何解释为什么1的char值返回笑脸,当1的ascii代码是SOH时。我研究了这个问题的答案,但我找不到任何解释为什么会发生这种情况的答案。

3 个答案:

答案 0 :(得分:3)

不同终端的输出不同。例如,在我的OS X默认终端上,不输出任何字符。

在您的情况下,的输出可能是由some historical reasons引起的。简而言之,这是因为将字节0x01映射到U+263A的代码页437是MS-DOS的字符集。

答案 1 :(得分:2)

因为1不是可打印的字符代码。如果你想要'1',你需要用字符文字来写它:

 printf( "%c", '1' );
            // ^^^

答案 2 :(得分:2)

如果您使用数字,您将从ASCII表中选择一个字符编号,如果您使用char,您将找到该字符。

示例:此代码打印ASCII字符编号65:

printf( "%c", 65 ); // Outputs: A

此代码打印字母A:

printf( "%c", 'A' ); // Outputs: A