Преобразование массива символов в int / double / float

#c

#c

Вопрос:

Спасибо за помощь, но, возможно, мне следует прояснить мою проблему. Например, я хочу прочитать некоторые адреса из текстового файла:

someFile:: 0xc4fap4424ab1 0xac8374ce93ac … и т. д

Теперь я хочу взять эти адреса и преобразовать их в десятичные, чтобы я мог сравнивать адреса. Итак, мой вопрос: 1. Как мне сохранить эти адреса 2. После того, как я сохранил адреса, как я могу преобразовать их в десятичные.

Комментарии:

1. Это даже не компилируется. Что вы на самом деле пытаетесь сделать?

2. Это должно быть: "0xfffffffffff0" ?

3. когда ‘p’ стало шестнадцатеричной цифрой?

4. Извините за опечатку, в любом случае просто предположим, что это правильное шестнадцатеричное число.

Ответ №1:

Ваш инициализатор объявляет только один элемент для temp массива, и это значение намного превышает возможности a char . Максимальное значение, которое вы можете сохранить в одном char , равно 0xFF .

Если temp бы было что-то в виде:

 char temp[] = {0x12, 0x34, 0x56, 0x78};
  

Затем вы могли бы немного изменить бит, чтобы получить int из 4 байтов. На самом деле я бы использовал uint32_t , чтобы быть независимым от платформы:

 uint32_t x = (temp[0] << 24) | (temp[1] << 16) | (temp[2] << 8) | temp[3];
  

Конечно, вы также должны позаботиться о порядке следования.

Комментарии:

1. Спасибо за помощь, но, возможно, мне следует прояснить мою проблему. Я хочу прочитать некоторые адреса из текстового файла, например: someFile:: 0xc4fap4424ab1 0xac8374ce93ac … и т. д