首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止Windows控制台应用程序在显示二进制数据时触发蜂鸣声

如何停止Windows控制台应用程序在显示二进制数据时触发蜂鸣声
EN

Stack Overflow用户
提问于 2011-09-29 20:45:16
回答 5查看 851关注 0票数 1

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

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

代码语言:javascript
复制
int main(int argc, char** argv)
{
  char c = 7;
  std::cout << c;
}

我的问题很简单,有没有办法禁用蜂鸣音?

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-29 20:53:44

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2011-09-29 21:25:32

还有很多其他值会触发奇怪的事情(取决于您使用的终端)。在输出字符之前,您应该使用isprint检查每个字符。更好的是有这样的函数:

代码语言:javascript
复制
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;
}
票数 1
EN

Stack Overflow用户

发布于 2011-11-02 17:11:57

禁用蜂鸣器的一种方法(在Windows命令行中):

代码语言:javascript
复制
net stop beep

它应该会暂时禁用蜂鸣音。如果您想要完整效果(重新启动时重新应用),请键入以下内容:

代码语言:javascript
复制
sc config beep start= disabled
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7597516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档