C#, как присвоить char значение null или его аналог.

Пост из серии спрашивали — отвечаем.

Значение null переменной типа char не присвоить никак, т.к. char относится к «простым» (в другой литературе «базовым») типам, которые не могут принимать значение null, и обязательно должны быть проинициализированы каким-то значением.

Но иногда надо объявить переменную типа char, с которой работать будем потом, например, в цикле. Как тогда быть? Можно инициализировать переменную символом с кодом 0 (0x00). Проще всего сделать это так:

char Chr = '\0';

Но можно и другими способами:

char Chr = char.MinValue;
char Chr = (char)0;

Или даже с извращениями:

char Chr = "\0".ToCharArray()[0];

Или с извращениями, используя большой и тяжелый класс Convert, который лучше избегать, если он не очень нужен:

char Chr = Convert.ToChar(0);

C#, регулярное выражение для кириллицы.

Понадобилось тут узнать, содержит ли строка кириллицу. Решение через Regexp.

Кириллица

[а-я]

Кириллица или пробел

[а-я]|\s

Пример использования

Подключаем System.Text.RegularExpressions:

using System.Text.RegularExpressions;

Код:

public static bool ContainsRus(string TestString)
{
    return
        Regex.IsMatch(TestString, @"[а-я]", RegexOptions.IgnoreCase);
}

public static bool ContainsRusOrSpace(string TestString)
{
    return
        Regex.IsMatch(TestString, @"[а-я]|\s", 	RegexOptions.IgnoreCase);
}

Код на PasteBin

Анализ и распаковка установщика QTInstaller вручную. С помощью HEX-редактора и такой-то матери.

Преамбула

Понадобилась мне одна программка, которая, почему-то не захотела ставиться на мою систему, причем не захотела без всяких ошибок и вылетаний. Инсталлятор просто висел на 1% и дальше двигаться не хотел. Зная, что поддержка винды у этой софтины зависит исключительно от бодуна разработчиков (то они винду вообще не поддерживали, потом прошлая версия прекрасно ставилась и работала, а тут вдруг опять нет), решил я в софтине поковыряться, небось, софтина-то работает, а инсталлятор кривой. Но о том, как я возился с софтиной, напишу как-нибудь позже. А тут будет такой простенький заметк про реверсинг инсталлятора.

Определение инсталлятора

Я уже как-то упоминал (копия), что инсталляторов и упаковщиков есть туева хуча на свете, и для начала надо определить, с каким именно инсталлером мы имеем дело. Для этого воспользуюсь программкой Detect It Easy (DiE), которая по своей базе сигнатур может определять тип экзешника, чем он упакован, чем скомпилирован, а если это инсталлятор — определить и его тип. Программка работает примерно также, как антивирусный сканер, определяя по сигнатурам, с чем мы имеем дело. Благо, почти все упаковщики, компиляторы или сборщики инсталляционных пакетов, так или иначе оставляют свою сигнатуру в файле.

Итак, скармливаю DiE исследуемый инсталлятор.

Видим тип — QT installer.

Об автоматической распаковке и дальнейших мыслях

Естественно, о ней я и подумал сразу же, не изобретать же велосипед, до нас его более умные люди изобрели. А не тут-то было! Автоматического распаковщика не нашел, так что стал думать… Qt проект открытый, значит, скорее всего, они особо не заморачивались, и инсталлятор представляет из себя самораспаковывающийся архив, который по структуре выглядит как-то так, как выглядят самораспаковывающиеся архивы RAR WinZip или 7Zip — в начале файла EXE-модуль, а после него данные, которые EXE-модуль распаковывает:

В принципе, что я иду верным путем, можно было понять из главного окна DiE, тот недвусмысленно сообщал про overlay (оверлей), в котором находятся QT installer data, т.е. данные QT-установщика.

Далее под катом

Инструменты

Detect It Easy (DiE):

На Exe-Lab
На Mega.nz

qresExtract:

Binary for Windows x86
Sources

WinHex 19.9:

Скачать с rutracker.org
Ссылка на Torrent-файл

Niet, Molotoff, клип от студии Психозмультфильм

Когда-то сто лет назад один из друзей его даже размещал на только что появившемся Ютубе (по просьбе [info]rutopist@lj), но теперь уж не той записи, и того ролика найти нельзя. А вот флешка нашлась — конвертнул в экзешник, кому надо — берите. Песня почему-то без третьего куплета, но это косяк авторов оригинального ролика.

Скачать оригинал можно на Mega.NZ (RAR: SWF+EXE)

Установка аналога apt-get в Cygwin

У Cygwin есть свой пакетный менеджер, встроенный, собственно, в установщик. Однако, если надо установить что-нибудь небольшое, то выходить из консоли и запускать инсталлятор лень. Можно установить аналог убунтовского apt-get.

1. В установщике сначала устанавливаем wget, если раньше этого не сделали (в окне мастера со списком пакетов выбираем Full [1]) и в поиске[2] вводим wget. Выбираем последнюю версию в столбце New[3].

Картинка в полном разрешении

2. Скачиваем скрипт apt-cyg (в консоли Cygwin):

wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg

3. Даем скрипту права на исполнение:

chmod +x apt-cyg

4. Перемещаем скрипт в /usr/local/bin:

mv apt-cyg /usr/local/bin

Пользоваться apt-cyg так же, как убунтовским apt-get. Все зависимости от устанавливаемого пакета подтянутся автоматически. Например, можно установить mc:

apt-cyg install mc

После того, как скрипт отработает, запускаем:

mc

ФАНФАРЫ!