如何停止 Windows 控制台应用程序在显示二进制数据时触发蜂鸣声
我编写了一个 Windows 控制台应用程序,用于从第三方提供商接收二进制数据。 出于调试和日志记录的目的,我在输出(控制台)上显示二进制数据。
不幸的是,当显示字符 7 时,它会触发蜂鸣声。 这是可以触发它的代码:
int main(int argc, char** argv)
{
char c = 7;
std::cout << c;
}
我的问题很简单,有没有办法禁用蜂鸣声?
谢谢
I wrote a windows console application that receives binary data from a third party provider.
For Debug and logging purposes, I display the binary data on the output (the console).
Unfortunately when the character 7 is displayed it triggers a beep.
Here is a code that can trigger it:
int main(int argc, char** argv)
{
char c = 7;
std::cout << c;
}
My question is simple, is there a way to disable the beeps ?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(5)
如日中天2024-12-14 02:25:33
还有很多其他值会触发奇怪的事情(取决于您使用的终端)。在输出之前,您应该使用 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;
}
旧城空念2024-12-14 02:25:33
char c = 7;
根据 ASCII 是一个 BELL
如果你想显示 7 那么你需要将其用单引号括起来(或者它们的调用方式:
char c = '7';
如果你不想显示 7 那么你需要删除字符 0x07 或将其替换为(例如'')
(http://www.asciitable.com/)
~没有更多了~
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
您可以拔掉计算机上的蜂鸣器。
如果这不是一个选择:
如果您有一个方法 debug(String s) 输出字符串 s,则可以将字符 7 替换为其他内容以避免发出蜂鸣声。
另一种方法是以十六进制形式输出文本。
You could unplug the beeper in your computer.
If that is not an option:
If you have a method debug(String s) that outputs the string s, you could replace character 7 by something else to avoid the beep.
Another way would be to output the text in hexadecimal form.