2011-09-29 14 views
1

我编写了一个Windows控制台应用程序,该应用程序从第三方提供程序接收二进制数据。 为了调试和记录目的,我在输出(控制台)上显示二进制数据。如何在显示二进制数据时阻止我的Windows控制台应用程序触发器发出哔声

不幸的是,当显示角色7时,它会触发嘟嘟声。 这里是一个可以触发它的代码:

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

我的问题很简单,就是有办法禁用蜂鸣声?

谢谢

回答

3

您可以拔掉电脑中的蜂鸣器。

如果这不是一个选项: 如果你有一个方法调试(字符串s)输出字符串s,你可以用别的字符替换字符7以避免蜂鸣。

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

+0

感谢您的回答,关闭了蜂鸣器的工作,但是您是否知道角色7代表的是什么以及为什么会发出蜂鸣声? – Arthur

+4

字符7代表嘟嘟声。我不是在开玩笑。 –

+1

在ASCII编码方案中,0x07代表BEL控制字符。接收此字符时,终端和输出设备通常会发出声音(嘟嘟声)。 –

0

char c = 7;是根据ASCII 一个钟,如果你想显示7,那么你需要把它包在单引号(或他们是怎么叫:

char c = '7'; 

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

+0

Que?为什么downvote? – RvdK

+0

我想OP想知道如何输出字符0x07而不发出哔哔声。不是数字'7'。 –

+0

在这种情况下,他应该删除字符0x07或将其替换为'' – RvdK

1

还有很多其他值会触发奇怪的事情(取决于您使用的终端) 。你应该先检查每个字符isprint输出它。更好的是一个函数,如:应该暂时禁用蜂鸣声

net stop beep 

:禁用蜂鸣器(在Windows命令行)

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

的一种方式。如果你想充分发挥作用(重新申请重新启动时)输入:

sc config beep start= disabled 
+0

这就像放火烧房子一样,因为您在邮箱中收到纸质垃圾邮件。 – CodeCaster

+0

@CodeCaster断开发言者(最高投票答案)更像这样。 –

0

选择解释字符7字形,而不是控制字符代码页。详情请参阅我的other answer

相关问题