1

サード パーティ プロバイダーからバイナリ データを受信する Windows コンソール アプリケーションを作成しました。デバッグとログの目的で、バイナリ データを出力 (コンソール) に表示します。

残念ながら、文字 7 が表示されるとビープ音が鳴ります。これをトリガーできるコードは次のとおりです。

int main(int argc, char** argv)
{
  char c = 7;
  std::cout << c;
}

私の質問は簡単です。ビープ音を無効にする方法はありますか?

ありがとう

4

5 に答える 5

3

コンピューターのブザーを抜くことができます。

それができない場合: 文字列 s を出力するメソッド debug(String s) がある場合、ビープ音を避けるために文字 7 を別のものに置き換えることができます。

もう 1 つの方法は、テキストを 16 進形式で出力することです。

于 2011-09-29T12:53:44.120 に答える
1

奇妙なことを引き起こす他の多くの値があります (使用する端末によって異なります)。isprint出力する前に、各文字をチェックする必要があります。さらに良いのは、次のような関数です。

void memdump( std::ostream& o, const void* data, size_t len )
{
        const unsigned char* ptr = static_cast<const unsigned char*>(data);

        for( size_t i = 0; i < len; i += 16 )
        {
                o << std::setw(8);
                o << std::setfill('0');
                o << std::hex << i << ' ';
                size_t to = std::min(len,i+16);
                for( size_t j = i; j < to; ++j )
                {
                        o << ' ';
                        o << std::setw(2);
                        o << std::setfill('0');
                        o << std::hex;
                        o << (unsigned)ptr[j];

                        if( (j+1) % 8 == 0 )
                        {
                                o << ' ';
                        }
                }
                o << "  ";
                for( size_t j = to; j < i+16; ++j )
                {
                        o << "   ";
                        if( (j+1) % 8 == 0 )
                        {
                                o << ' ';
                        }
                }

                for( size_t j = i; j < to; ++j )
                {
                        if(isprint(ptr[j]))
                        {
                                o << ptr[j];
                        }
                        else
                        {
                                o << '.';
                        }
                        if( (j+1) % 8 == 0 )
                        {
                                o << ' ';
                        }
                }
                o << '\n';
        }
        o << std::dec;
}
于 2011-09-29T13:25:32.360 に答える
1

ビープ音を無効にする方法 (Windows コマンド ラインで):

net stop beep

ビープ音を一時的に無効にする必要があります。完全な効果 (再起動時に再適用) が必要な場合は、次のように入力します。

sc config beep start= disabled
于 2011-11-02T09:11:57.087 に答える
0

文字 7 を制御文字ではなくグリフとして解釈するコード ページを選択します。詳細については、他の回答を参照してください。

于 2013-02-09T01:21:51.720 に答える
0

char c = 7;7 を表示する場合は、ASCII による BELL であり、単一引用符で囲む必要があります (または、それらの呼び出し方法:

char c = '7';

7 を表示したくない場合は、文字 0x07 を削除するか、(たとえば '') ( http://www.asciitable.com/ )に置き換える必要があります。

于 2011-09-29T12:56:23.620 に答える