Похоже, вы получаете шестнадцатеричную строку, и вам необходимо сохранить числовое значение в переменной.Затем, в какой-то момент в будущем вам нужно преобразовать обратно из переменной в строку.
Вам не нужно беспокоиться о внутреннем представлении, используемом базовыми числовыми типами (int, long, float),В то время как компьютер изначально сохраняет значение в двоичном виде, языки программирования спроектированы таким образом, что этот факт (несколько) скрыт от вас, поэтому вам не нужно об этом беспокоиться.
Теперь, когда мы позволилиязык абстрагирует внутреннее хранилище как «число», все, что нам нужно, это способ прочитать и записать это число.Все языки имеют функции, которые позволяют вам читать / записывать данные в разных форматах, и вы всегда можете свернуть свои собственные (хотя это не рекомендуется, если вы только не учитесь), поэтому я использую предложения C.
Cscanf()
и printf()
- есть и другие функции, которые тоже будут выполнять эту работу, но это хороший пример того, что вы можете использовать.Эти функции очень похожи, поэтому легко написать код:
#include <errno.h>
#define FORMAT "%X"
// Converts string input into n integer
//
// args
// str the string to convert
// x pointer to location for return value
//
// returns
// 0 on success
// nonzero on failure
int get_num_from_hex_string(char* str, int* x)
{
if( str == 0 ) return EINVAL;
// we assume MAX_LEN is defined, somewhere...
if( strlen(str) > MAX_LEN ) return EINVAL;
int result = scanf(FORMAT, x);
// there's prolly a better error, but good enough for now
if( result != 1 ) return EIO;
return 0;
}
// Converts an integer into a hex string
//
// args
// x - the integer to convert
// str - the pre-allocated output buffer
// len - amount of space left in str. Must be
// at least 12 bytes.
//
// returns
// 0 on success
// nonzero on failure
int get_hex_string(int x, char*str, int len)
{
if( str == 0 ) return EINVAL;
if( len < 12 ) return EINVAL;
sprintf(str, FORMAT, x);
}