我如何停止我的Windows控制台应用程序触发哔哔声时显示二进制数据

How can I stop my Windows console application triggers beeps when displaying binary data

本文关键字:显示 数据 二进制 何停止 我的 Windows 应用程序 控制台      更新时间:2023-10-16

我编写了一个从第三方提供程序接收二进制数据的windows控制台应用程序。出于调试和日志记录的目的,我在输出(控制台)上显示二进制数据。

不幸的是,当字符7显示时,它会触发哔哔声。下面是可以触发它的代码:

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

我的问题很简单,有没有办法禁用哔哔声?

谢谢

你可以拔掉你电脑里的传呼机。

如果没有选项:如果您有一个输出字符串s的方法debug(String s),您可以用其他东西替换字符7以避免哔哔声。

另一种方法是以十六进制形式输出文本

还有很多其他值会触发奇怪的事情(取决于您使用的终端)。在输出之前,应该用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;
}

禁用传呼机的方法(在Windows命令行中):

net stop beep

应该暂时禁用蜂鸣声。如果您想要完整的效果(重新启动时重新应用),请键入:

sc config beep start= disabled

char c = 7;是ASCII中的BELL如果你想显示7,那么你需要用单引号(或者它们的叫法:

)把它括起来。
char c = '7';

如果你不想显示一个7,那么你需要删除字符0x07或替换为(例如用")(http://www.asciitable.com/)

选择将字符7解释为字形而不是控制字符的代码页。