我如何停止我的Windows控制台应用程序触发哔哔声时显示二进制数据
How can I stop my Windows console application triggers beeps when displaying binary data
我编写了一个从第三方提供程序接收二进制数据的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解释为字形而不是控制字符的代码页。
相关文章:
- 访问和打印元组中的数据,并使用 C++14 使用模板函数显示数据
- 它不显示数据,只显示永无止境的循环
- 在网格视图中显示数据 - 基于 MFC c++ 对话框的应用程序
- 使用 insertion(<<) 运算符和 "write" 函数在 C++ 中显示数据有什么区别?
- 使用 ARDUINO 和处理在 8x8 LED 矩阵上显示数据时出现问题
- 列表视图最初不显示数据
- C++服务器未显示数据包
- 模板堆栈类:堆栈中没有显示数据
- 使用选择排序对名称进行排序并显示数据
- 'top'程序用于在屏幕上重新显示数据的技术是什么?
- 以两列c++显示数据
- QTableView 显示列标题,但不显示数据
- 显示功能不显示数据
- 从变体VT_ARRAY读取和显示数据 |VT_BSTR
- 线程不刷新数据,在屏幕中显示数据时出错
- 使用C++与3000Hz的线阵扫描相机接口,并处理/显示数据
- QtableWidget不显示数据
- 不按我的要求显示数据输入表单
- 无法在 MySql 数据库中的 C++ QTableView 中显示数据 QSqlQueryModel
- 使用SDI应用程序(MFC)从文本文件读取数据并显示数据