Генерация файла с числами ASCII с помощью/dev/urandom?

Я нашел много ссылок онлайн, которые говорят, что удар должен интерпретировать \f как ясный экран. И так же, как многие говорящие это не работают.

Вы можете смешивать с Вашим stty настройки, чтобы заставить это интерпретировать \f правильно (который в этом контексте был бы записан как ^L для Ctrl+L). Но я ничто не мог найти очевидным.

Обходное решение должно было бы изменить Ваш код. Но нет никакого легкого, межплатформенного способа очистить экран. Однако существует много способов выбрать из. Если возможно, можно связать в библиотеке проклятий и использовании это. Или stdlib.h и использование system().

Лично, способ, которым я всегда делал это, должен просто отправить Управляющий код ANSI:

printf("\033[2J");

Я - вполне уверенный удар, интерпретирует это очень хорошо. И просто необходимо удостовериться, что включили совместимость ANSI/VT100 при использовании PuTTY или Гипертерминала.

7
19.08.2014, 16:45
2 ответа
  • Числа ASCII от 0 до 9

      10mb.txt
     
  • 1 и 0 в коде ASCII

      10mb.txt
     
7
27.01.2020, 20:16

, если вы считаете, что фактическое значение для каждого байта вы получаете из , только значим в этом Он представляет собой успешное вероятность возникновения этого байта, определяемое PRNG, то вы поймете, что входной байт соответствует значению для тех, которые вы ищете, это не так, как часто Как часто Это делает. Если PRNG кажется хорошим, то любой байт в спектре ASCII должен иметь шанс 1/256 для прочитанного для каждого байта.

Если вы хотите сузить этот спектр на некоторое подмножество ASCII, то наиболее эффективный способ обрабатывать, то есть для одновременного расширения вероятности случаев возникновения для тех символов в вашем подмножестве и удалить вероятность любых других. TR очень хорош в этом, так как позволяет преобразовать символы в указанный диапазон для многих вхождений замены. Вроде это:

d=$(printf '[%d*25]' 1 2 3 4 5 6 7 8 9)
</dev/urandom LC_ALL=C tr '\0-\377' "$d[0*]"

там есть несколько вещей, и они есть:

  1. D = [[CHAR] * [NUM]] ...

    • Здесь я просто настроил VAR, содержащий второй аргумент I значит для руки TR в следующей строке. Каждое значение [] Square-Brackated Value - это целевая цель преобразования для TR и каждого * 25 значение [25 * 25 значение, представляет, сколько членов диапазона в порядке, как указано в TR Первый аргумент должен нацелить этот символ для преобразования.
  2. LC_ALL = C

    • Это (главное) мандаты, что каждый каждый байт можно интерпретировать как байт ASCII, так и все байты. Будет любой из Nul через восьмерию \ 377 .
  3. '\ 0- \ 377' "$ d [0 *]"

    • Это поручает tr для преобразования всех входных байтов в соответствии со значением в $ d . Это означает, что байты \ 0- \ 30 (или первые 25 байтов в диапазоне) преобразуются в одни, \ 31- \ 61 в TWOS и так далее Отказ

Результатом является то, что весь вход преобразуется только в цифры на (почти) даже распределение случайности - и поэтому используется каждый байт, но все они заводят те, которые вы хотите. Однако с приведенным выше примером существует на 4% больше шансов, что 0 будет происходить в выходе , чем любой из других байтов. Если это проблема, вы также можете сделать:

LC_ALL=C </dev/urandom \
tr '\0-\377' "[\0*5]$d[0*]" | 
tr -d \\0

... который решает эту проблему.

Теперь, для 10 м, это будет работать:

TR PIPELINE | dd bs=4k count=2560
5
27.01.2020, 20:16

Теги

Похожие вопросы