我写了一个windows控制台应用程序,它从第三方提供商那里接收二进制数据。出于调试和日志记录的目的,我在输出(控制台)上显示二进制数据。
不幸的是,当显示字符7时,它会触发蜂鸣声。下面是一个可以触发它的代码:
int main(int argc, char** argv)
{
char c = 7;
std::cout << c;
}我的问题很简单,有没有办法禁用蜂鸣音?
谢谢
发布于 2011-09-29 20:53:44
你可以拔掉你电脑里的寻呼机。
如果这不是一个选项:如果您有一个输出字符串s的方法debug(String s),您可以用其他东西替换字符7,以避免发出蜂鸣声。
另一种方法是以十六进制形式输出文本。
发布于 2011-09-29 21:25:32
还有很多其他值会触发奇怪的事情(取决于您使用的终端)。在输出字符之前,您应该使用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-11-02 17:11:57
禁用蜂鸣器的一种方法(在Windows命令行中):
net stop beep它应该会暂时禁用蜂鸣音。如果您想要完整效果(重新启动时重新应用),请键入以下内容:
sc config beep start= disabledhttps://stackoverflow.com/questions/7597516
复制相似问题