Searching for myself
-
Автор темы
- #1
Посмотрел как конвертируют в
Референсы:
Пожалуйста, авторизуйтесь для просмотра ссылки.
и
Пожалуйста, авторизуйтесь для просмотра ссылки.
, мне не понравилось, вот реализация с использованием std::regex
PatternToBytes:
// Classes, algorithms and iterators to support regular expression processing
#include <regex>
// std::optional class template
#include <optional>
// std::basic_string class template
#include <string>
// std::vector container
#include <vector>
std::vector< std::optional< std::uint8_t > > PatternToBytes( const std::string &strPattern ) const noexcept {
// Declare a vector of uint8_t to store the bytes
std::vector< std::optional< std::uint8_t > > vecBytes;
// Declare a std::smatch object to store the results of a regex search
std::smatch MatchResults;
// Use a regular expression to match hexadecimal values (e.g. "AA", "FF") or '?' characters
const std::regex RegexPattern( "([0-9a-fA-F]{2}|\\?)" );
// Declare an iterator to the beginning of the string
auto Iterator = strPattern.cbegin( );
// Search for a hexadecimal number in the string, starting at the iterator
while ( std::regex_search( Iterator, strPattern.cend( ), MatchResults, RegexPattern ) ) {
// If the matched value is '?', store a null optional in the output vector
if ( MatchResults[ 1U ] == '?' )
vecBytes.emplace_back( std::nullopt );
else
// Otherwise, convert the hexadecimal string to a number and store it in the output vector
vecBytes.emplace_back( std::stoul( MatchResults[ 1U ], nullptr, 16 ) );
// Update the iterator to the end of the match
Iterator = MatchResults[ 0U ].second;
}
// Return the vector of converted bytes
return vecBytes;
}
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Последнее редактирование: