Как я могу остановить мое консольное приложение Windows запускает звуковые сигналы при отображении двоичных данных - PullRequest
1 голос
/ 29 сентября 2011

Я написал консольное приложение для Windows, которое получает двоичные данные от стороннего поставщика. В целях отладки и ведения журнала я отображаю двоичные данные на выходе (консоль).

К сожалению, когда отображается символ 7, он издает звуковой сигнал. Вот код, который может вызвать его:

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

У меня простой вопрос, есть ли способ отключить звуковые сигналы?

Спасибо

Ответы [ 5 ]

3 голосов
/ 29 сентября 2011

Вы можете отключить звуковой сигнал на вашем компьютере.

Если это не вариант: Если у вас есть метод debug (String s), который выводит строку s, вы можете заменить символ 7 чем-то другим, чтобы избежать звукового сигнала.

Другим способом будет вывод текста в шестнадцатеричной форме.

1 голос
/ 02 ноября 2011

Способ отключения бипера (в командной строке Windows):

net stop beep

Он должен временно отключить гудки.Если вы хотите получить полный эффект (повторно применяется при перезагрузке), введите:

sc config beep start= disabled
1 голос
/ 29 сентября 2011

Есть много других значений, которые будут вызывать странные вещи (в зависимости от того, какой терминал вы используете). Вы должны проверить каждый символ с 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;
}
0 голосов
/ 09 февраля 2013

Выберите кодовую страницу, которая интерпретирует символ 7 как глиф вместо управляющего символа. Подробнее см. Мой другой ответ .

0 голосов
/ 29 сентября 2011

char c = 7; это колокол в соответствии с ASCII если вы хотите отобразить 7, вам нужно заключить его в одинарные кавычки (или как они называются:

char c = '7';

Если вы не хотите отображать 7, вам нужно удалить символ 0x07 или заменить его на (например, на '') (http://www.asciitable.com/)

...