Anonymous
Как представить байты в формате, аналогичном формату Python в C++20?
Сообщение
Anonymous » 22 май 2024, 00:41
Проблема проста: учитывая массив/вектор/что угодно из uint8_t, то есть последовательность байтов, представьте его в таком формате: b'Hello, World!\x03\xb3T', это формат, используемый Python. Входные данные представляют собой последовательность байтов, а выходные данные — std::string, выходные данные направляются на std::cout.
Мне это нужно для обратного инженерных целях.
Не знаю, делалось ли это уже раньше, но найти не могу. В любом случае, ниже показано мое готовое решение на C++20, я все еще новичок в C++.
Код: Выделить всё
#include
#include
#include
#include
#include
#include
#include
typedef std::vector bytes;
using std::string;
using std::cout;
std::unordered_map ASCII = {
{0, "\\x00"},
{1, "\\x01"},
{2, "\\x02"},
{3, "\\x03"},
{4, "\\x04"},
{5, "\\x05"},
{6, "\\x06"},
{7, "\\x07"},
{8, "\\x08"},
{9, "\\t"},
{10, "\\n"},
{11, "\\x0b"},
{12, "\\x0c"},
{13, "\\r"},
{14, "\\x0e"},
{15, "\\x0f"},
{16, "\\x10"},
{17, "\\x11"},
{18, "\\x12"},
{19, "\\x13"},
{20, "\\x14"},
{21, "\\x15"},
{22, "\\x16"},
{23, "\\x17"},
{24, "\\x18"},
{25, "\\x19"},
{26, "\\x1a"},
{27, "\\x1b"},
{28, "\\x1c"},
{29, "\\x1d"},
{30, "\\x1e"},
{31, "\\x1f"},
{32, " "},
{33, "!"},
{34, "\""},
{35, "#"},
{36, "$"},
{37, "%"},
{38, "&"},
{39, "'"},
{40, "("},
{41, ")"},
{42, "*"},
{43, "+"},
{44, ","},
{45, "-"},
{46, "."},
{47, "/"},
{48, "0"},
{49, "1"},
{50, "2"},
{51, "3"},
{52, "4"},
{53, "5"},
{54, "6"},
{55, "7"},
{56, "8"},
{57, "9"},
{58, ":"},
{59, ";"},
{60, ""},
{63, "?"},
{64, "@"},
{65, "A"},
{66, "B"},
{67, "C"},
{68, "D"},
{69, "E"},
{70, "F"},
{71, "G"},
{72, "H"},
{73, "I"},
{74, "J"},
{75, "K"},
{76, "L"},
{77, "M"},
{78, "N"},
{79, "O"},
{80, "P"},
{81, "Q"},
{82, "R"},
{83, "S"},
{84, "T"},
{85, "U"},
{86, "V"},
{87, "W"},
{88, "X"},
{89, "Y"},
{90, "Z"},
{91, "["},
{92, "\\\\"},
{93, "]"},
{94, "^"},
{95, "_"},
{96, "`"},
{97, "a"},
{98, "b"},
{99, "c"},
{100, "d"},
{101, "e"},
{102, "f"},
{103, "g"},
{104, "h"},
{105, "i"},
{106, "j"},
{107, "k"},
{108, "l"},
{109, "m"},
{110, "n"},
{111, "o"},
{112, "p"},
{113, "q"},
{114, "r"},
{115, "s"},
{116, "t"},
{117, "u"},
{118, "v"},
{119, "w"},
{120, "x"},
{121, "y"},
{122, "z"},
{123, "{"},
{124, "|"},
{125, "}"},
{126, "~"},
{127, "\\x7f"},
{128, "\\x80"},
{129, "\\x81"},
{130, "\\x82"},
{131, "\\x83"},
{132, "\\x84"},
{133, "\\x85"},
{134, "\\x86"},
{135, "\\x87"},
{136, "\\x88"},
{137, "\\x89"},
{138, "\\x8a"},
{139, "\\x8b"},
{140, "\\x8c"},
{141, "\\x8d"},
{142, "\\x8e"},
{143, "\\x8f"},
{144, "\\x90"},
{145, "\\x91"},
{146, "\\x92"},
{147, "\\x93"},
{148, "\\x94"},
{149, "\\x95"},
{150, "\\x96"},
{151, "\\x97"},
{152, "\\x98"},
{153, "\\x99"},
{154, "\\x9a"},
{155, "\\x9b"},
{156, "\\x9c"},
{157, "\\x9d"},
{158, "\\x9e"},
{159, "\\x9f"},
{160, "\\xa0"},
{161, "\\xa1"},
{162, "\\xa2"},
{163, "\\xa3"},
{164, "\\xa4"},
{165, "\\xa5"},
{166, "\\xa6"},
{167, "\\xa7"},
{168, "\\xa8"},
{169, "\\xa9"},
{170, "\\xaa"},
{171, "\\xab"},
{172, "\\xac"},
{173, "\\xad"},
{174, "\\xae"},
{175, "\\xaf"},
{176, "\\xb0"},
{177, "\\xb1"},
{178, "\\xb2"},
{179, "\\xb3"},
{180, "\\xb4"},
{181, "\\xb5"},
{182, "\\xb6"},
{183, "\\xb7"},
{184, "\\xb8"},
{185, "\\xb9"},
{186, "\\xba"},
{187, "\\xbb"},
{188, "\\xbc"},
{189, "\\xbd"},
{190, "\\xbe"},
{191, "\\xbf"},
{192, "\\xc0"},
{193, "\\xc1"},
{194, "\\xc2"},
{195, "\\xc3"},
{196, "\\xc4"},
{197, "\\xc5"},
{198, "\\xc6"},
{199, "\\xc7"},
{200, "\\xc8"},
{201, "\\xc9"},
{202, "\\xca"},
{203, "\\xcb"},
{204, "\\xcc"},
{205, "\\xcd"},
{206, "\\xce"},
{207, "\\xcf"},
{208, "\\xd0"},
{209, "\\xd1"},
{210, "\\xd2"},
{211, "\\xd3"},
{212, "\\xd4"},
{213, "\\xd5"},
{214, "\\xd6"},
{215, "\\xd7"},
{216, "\\xd8"},
{217, "\\xd9"},
{218, "\\xda"},
{219, "\\xdb"},
{220, "\\xdc"},
{221, "\\xdd"},
{222, "\\xde"},
{223, "\\xdf"},
{224, "\\xe0"},
{225, "\\xe1"},
{226, "\\xe2"},
{227, "\\xe3"},
{228, "\\xe4"},
{229, "\\xe5"},
{230, "\\xe6"},
{231, "\\xe7"},
{232, "\\xe8"},
{233, "\\xe9"},
{234, "\\xea"},
{235, "\\xeb"},
{236, "\\xec"},
{237, "\\xed"},
{238, "\\xee"},
{239, "\\xef"},
{240, "\\xf0"},
{241, "\\xf1"},
{242, "\\xf2"},
{243, "\\xf3"},
{244, "\\xf4"},
{245, "\\xf5"},
{246, "\\xf6"},
{247, "\\xf7"},
{248, "\\xf8"},
{249, "\\xf9"},
{250, "\\xfa"},
{251, "\\xfb"},
{252, "\\xfc"},
{253, "\\xfd"},
{254, "\\xfe"},
{255, "\\xff"}
};
template
inline bytes LittleEndian(const T& number) {
size_t size = sizeof(T);
bytes _bytes(size);
uint64_t mask = 255;
int shift = 0;
for (size_t i = 0; i < size; i++) {
_bytes[i] = (number & mask) >> shift;
mask
Подробнее здесь: [url]https://stackoverflow.com/questions/78514385/how-to-represent-bytes-in-a-format-similar-to-pythons-in-c20[/url]
1716327690
Anonymous
Проблема проста: учитывая массив/вектор/что угодно из uint8_t, то есть последовательность байтов, представьте его в таком формате: b'Hello, World!\x03\xb3T', это формат, используемый Python. Входные данные представляют собой последовательность байтов, а выходные данные — std::string, выходные данные направляются на std::cout. Мне это нужно для обратного инженерных целях. Не знаю, делалось ли это уже раньше, но найти не могу. В любом случае, ниже показано мое готовое решение на C++20, я все еще новичок в C++. [code]#include #include #include #include #include #include #include typedef std::vector bytes; using std::string; using std::cout; std::unordered_map ASCII = { {0, "\\x00"}, {1, "\\x01"}, {2, "\\x02"}, {3, "\\x03"}, {4, "\\x04"}, {5, "\\x05"}, {6, "\\x06"}, {7, "\\x07"}, {8, "\\x08"}, {9, "\\t"}, {10, "\\n"}, {11, "\\x0b"}, {12, "\\x0c"}, {13, "\\r"}, {14, "\\x0e"}, {15, "\\x0f"}, {16, "\\x10"}, {17, "\\x11"}, {18, "\\x12"}, {19, "\\x13"}, {20, "\\x14"}, {21, "\\x15"}, {22, "\\x16"}, {23, "\\x17"}, {24, "\\x18"}, {25, "\\x19"}, {26, "\\x1a"}, {27, "\\x1b"}, {28, "\\x1c"}, {29, "\\x1d"}, {30, "\\x1e"}, {31, "\\x1f"}, {32, " "}, {33, "!"}, {34, "\""}, {35, "#"}, {36, "$"}, {37, "%"}, {38, "&"}, {39, "'"}, {40, "("}, {41, ")"}, {42, "*"}, {43, "+"}, {44, ","}, {45, "-"}, {46, "."}, {47, "/"}, {48, "0"}, {49, "1"}, {50, "2"}, {51, "3"}, {52, "4"}, {53, "5"}, {54, "6"}, {55, "7"}, {56, "8"}, {57, "9"}, {58, ":"}, {59, ";"}, {60, ""}, {63, "?"}, {64, "@"}, {65, "A"}, {66, "B"}, {67, "C"}, {68, "D"}, {69, "E"}, {70, "F"}, {71, "G"}, {72, "H"}, {73, "I"}, {74, "J"}, {75, "K"}, {76, "L"}, {77, "M"}, {78, "N"}, {79, "O"}, {80, "P"}, {81, "Q"}, {82, "R"}, {83, "S"}, {84, "T"}, {85, "U"}, {86, "V"}, {87, "W"}, {88, "X"}, {89, "Y"}, {90, "Z"}, {91, "["}, {92, "\\\\"}, {93, "]"}, {94, "^"}, {95, "_"}, {96, "`"}, {97, "a"}, {98, "b"}, {99, "c"}, {100, "d"}, {101, "e"}, {102, "f"}, {103, "g"}, {104, "h"}, {105, "i"}, {106, "j"}, {107, "k"}, {108, "l"}, {109, "m"}, {110, "n"}, {111, "o"}, {112, "p"}, {113, "q"}, {114, "r"}, {115, "s"}, {116, "t"}, {117, "u"}, {118, "v"}, {119, "w"}, {120, "x"}, {121, "y"}, {122, "z"}, {123, "{"}, {124, "|"}, {125, "}"}, {126, "~"}, {127, "\\x7f"}, {128, "\\x80"}, {129, "\\x81"}, {130, "\\x82"}, {131, "\\x83"}, {132, "\\x84"}, {133, "\\x85"}, {134, "\\x86"}, {135, "\\x87"}, {136, "\\x88"}, {137, "\\x89"}, {138, "\\x8a"}, {139, "\\x8b"}, {140, "\\x8c"}, {141, "\\x8d"}, {142, "\\x8e"}, {143, "\\x8f"}, {144, "\\x90"}, {145, "\\x91"}, {146, "\\x92"}, {147, "\\x93"}, {148, "\\x94"}, {149, "\\x95"}, {150, "\\x96"}, {151, "\\x97"}, {152, "\\x98"}, {153, "\\x99"}, {154, "\\x9a"}, {155, "\\x9b"}, {156, "\\x9c"}, {157, "\\x9d"}, {158, "\\x9e"}, {159, "\\x9f"}, {160, "\\xa0"}, {161, "\\xa1"}, {162, "\\xa2"}, {163, "\\xa3"}, {164, "\\xa4"}, {165, "\\xa5"}, {166, "\\xa6"}, {167, "\\xa7"}, {168, "\\xa8"}, {169, "\\xa9"}, {170, "\\xaa"}, {171, "\\xab"}, {172, "\\xac"}, {173, "\\xad"}, {174, "\\xae"}, {175, "\\xaf"}, {176, "\\xb0"}, {177, "\\xb1"}, {178, "\\xb2"}, {179, "\\xb3"}, {180, "\\xb4"}, {181, "\\xb5"}, {182, "\\xb6"}, {183, "\\xb7"}, {184, "\\xb8"}, {185, "\\xb9"}, {186, "\\xba"}, {187, "\\xbb"}, {188, "\\xbc"}, {189, "\\xbd"}, {190, "\\xbe"}, {191, "\\xbf"}, {192, "\\xc0"}, {193, "\\xc1"}, {194, "\\xc2"}, {195, "\\xc3"}, {196, "\\xc4"}, {197, "\\xc5"}, {198, "\\xc6"}, {199, "\\xc7"}, {200, "\\xc8"}, {201, "\\xc9"}, {202, "\\xca"}, {203, "\\xcb"}, {204, "\\xcc"}, {205, "\\xcd"}, {206, "\\xce"}, {207, "\\xcf"}, {208, "\\xd0"}, {209, "\\xd1"}, {210, "\\xd2"}, {211, "\\xd3"}, {212, "\\xd4"}, {213, "\\xd5"}, {214, "\\xd6"}, {215, "\\xd7"}, {216, "\\xd8"}, {217, "\\xd9"}, {218, "\\xda"}, {219, "\\xdb"}, {220, "\\xdc"}, {221, "\\xdd"}, {222, "\\xde"}, {223, "\\xdf"}, {224, "\\xe0"}, {225, "\\xe1"}, {226, "\\xe2"}, {227, "\\xe3"}, {228, "\\xe4"}, {229, "\\xe5"}, {230, "\\xe6"}, {231, "\\xe7"}, {232, "\\xe8"}, {233, "\\xe9"}, {234, "\\xea"}, {235, "\\xeb"}, {236, "\\xec"}, {237, "\\xed"}, {238, "\\xee"}, {239, "\\xef"}, {240, "\\xf0"}, {241, "\\xf1"}, {242, "\\xf2"}, {243, "\\xf3"}, {244, "\\xf4"}, {245, "\\xf5"}, {246, "\\xf6"}, {247, "\\xf7"}, {248, "\\xf8"}, {249, "\\xf9"}, {250, "\\xfa"}, {251, "\\xfb"}, {252, "\\xfc"}, {253, "\\xfd"}, {254, "\\xfe"}, {255, "\\xff"} }; template inline bytes LittleEndian(const T& number) { size_t size = sizeof(T); bytes _bytes(size); uint64_t mask = 255; int shift = 0; for (size_t i = 0; i < size; i++) { _bytes[i] = (number & mask) >> shift; mask Подробнее здесь: [url]https://stackoverflow.com/questions/78514385/how-to-represent-bytes-in-a-format-similar-to-pythons-in-c20[/url]