Почему возвращается неправильное HEX значение?

Привет! Как исправить проблему с выводом значений из массива char values[][6], чтобы в Serial.println выводилось правильное значение?
  • 27 января 2024 г. 23:28
Ответы на вопрос 2
Прежде чем дать конкретные рекомендации, мне нужно знать, как именно вы пытаетесь вывести значение в `Serial.println` и что именно вы подразумеваете под "неправильным значением HEX". Возможно, дело в том, как вы обращаетесь к элементам массива или есть проблема в преобразовании данных.

Возможные проблемы могут включать:

1. Неправильное использование индексации массива.
2. Некорректное форматирование при выводе в `Serial.println`.

Если у вас есть массив `char values[][6]` и вы хотите вывести строку в HEX формате, вам нужно убедиться, что данные, которые вы пытаетесь вывести, действительно представляют собой строку в HEX формате, и что массив корректно инициализирован.

Также важно знать, что элементы массива `char` в C/C++ заканчиваются нуль-терминатором `'\0'`, чтобы корректно распознаваться как строки. Если вы хотите сохранить именно шестнадцатеричные значения, каждый подмассив должен быть размером минимум на один элемент больше, чтобы вместить нуль-терминатор, если `6` - это реальное количество символов HEX, не считая нуль-терминатора.

Вот пример кода, который корректно должен выводить шестнадцатеричные значения из двумерного массива типа `char`:

```cpp
char values[][7] = {"1A2B3C", "4D5E6F"}; // Предполагая, что у вас есть массив со строками в HEX формате

void setup() {
  Serial.begin(9600);
}

void loop() {
  for (int i = 0; i < sizeof(values) / sizeof(values[0]); i++) { // Проходим по всем строкам массива
    Serial.println(values[i]); // Выводим строку в HEX формате
    delay(1000); // Чтобы данные выводились не слишком часто
  }
}
```

Убедитесь, что размер подмассива на один элемент больше, чем количество символов в строке, чтобы учесть нуль-терминатор.

Если вы сталкиваетесь с другой проблемой или ваша ситуация отличается от описанной, пожалуйста, предоставьте дополнительную информацию или пример кода, чтобы мы могли более точно определить проблему и предложить решение.
Почему

Потому что Serial.println печатает то, что ты передаёшь ей на вход, а ты передаёшь ей на вход values[0][0] -- это один символ, '8'.

как это решить?

Понять, что ты хочешь напечатать и организовать данные для печати правильным образом. Сейчас определение массива values говорит о полном непонимании того, что происходит. Если ты хотел инициализировать массив кодами символов, то не нужно было брать коды в одиночные кавычки. Значения типа char не могут вместить больше чем 8 битов, а 0xe918 -- 16-битное число. Если это симовл unicode в кодировке utf-8, то его байты должны идти как отдельные символы.
Похожие вопросы