CXX95 Telegram 81
#creepy

char, который не char 👎

В файлах разных форматах встречаются file signature - это какая-то последовательность байт, которая помогает подтвердить точный формат файла. Часто это значит, что в начале файла расположены "магические байты" специально для этого формата.

На википедии есть список сигнатур для многих форматов. Часто байты в начале файла человекочитаемы, то есть байты кодируют буквы латиницы - например Rar!, LZIP, OggS.

Посмотрим на пример класса, который принимает четыре байта, а потом проверяет, является ли это сигнатурой RAR-файла:
class BinarySignature {
public:
BinarySignature(int32_t value)
: Value_{value}
{}

int32_t AsInt() {
return Value_;
}

bool IsRar() {
return Value_ == 'Rar!';
}

private:
int32_t Value_;
};

Заметили ли вы что-то страшное? Это сравнение int с многосимвольным char!
Value_ == 'Rar!'

Запись литерала 'X' из одного символа везде поддерживается одинаково и имеет тип char.

Запись литерала 'XXXXX' из нескольких символов имеет тип int, но компилятор вправе не поддерживать такую запись. Также у этой записи implementation-defined числовое значение, то есть также отдано на откуп компилятору.

Большинство компиляторов C++ поддерживают мульти-символьный литерал и переводят его в int как если бы это были последовательные байты.

Ссылка на godbolt.

Вот такой бывает удобный юзкейс, когда надо взаимодействовать с человекочитаемыми сигнатурами в бинарных файлах 😐
Please open Telegram to view this post
VIEW IN TELEGRAM



tgoop.com/cxx95/81
Create:
Last Update:

#creepy

char, который не char 👎

В файлах разных форматах встречаются file signature - это какая-то последовательность байт, которая помогает подтвердить точный формат файла. Часто это значит, что в начале файла расположены "магические байты" специально для этого формата.

На википедии есть список сигнатур для многих форматов. Часто байты в начале файла человекочитаемы, то есть байты кодируют буквы латиницы - например Rar!, LZIP, OggS.

Посмотрим на пример класса, который принимает четыре байта, а потом проверяет, является ли это сигнатурой RAR-файла:

class BinarySignature {
public:
BinarySignature(int32_t value)
: Value_{value}
{}

int32_t AsInt() {
return Value_;
}

bool IsRar() {
return Value_ == 'Rar!';
}

private:
int32_t Value_;
};

Заметили ли вы что-то страшное? Это сравнение int с многосимвольным char!
Value_ == 'Rar!'

Запись литерала 'X' из одного символа везде поддерживается одинаково и имеет тип char.

Запись литерала 'XXXXX' из нескольких символов имеет тип int, но компилятор вправе не поддерживать такую запись. Также у этой записи implementation-defined числовое значение, то есть также отдано на откуп компилятору.

Большинство компиляторов C++ поддерживают мульти-символьный литерал и переводят его в int как если бы это были последовательные байты.

Ссылка на godbolt.

Вот такой бывает удобный юзкейс, когда надо взаимодействовать с человекочитаемыми сигнатурами в бинарных файлах 😐

BY C++95


Share with your friend now:
tgoop.com/cxx95/81

View MORE
Open in Telegram


Telegram News

Date: |

Hashtags are a fast way to find the correct information on social media. To put your content out there, be sure to add hashtags to each post. We have two intelligent tips to give you: The initiatives announced by Perekopsky include monitoring the content in groups. According to the executive, posts identified as lacking context or as containing false information will be flagged as a potential source of disinformation. The content is then forwarded to Telegram's fact-checking channels for analysis and subsequent publication of verified information. Commenting about the court's concerns about the spread of false information related to the elections, Minister Fachin noted Brazil is "facing circumstances that could put Brazil's democracy at risk." During the meeting, the information technology secretary at the TSE, Julio Valente, put forward a list of requests the court believes will disinformation. To upload a logo, click the Menu icon and select “Manage Channel.” In a new window, hit the Camera icon. Write your hashtags in the language of your target audience.
from us


Telegram C++95
FROM American