AnsiString & HEX
От: mrdemon  
Дата: 23.11.06 11:10
Оценка:
Програмлю в Builder C++ 6. Появилась необходимость добавление к запросу ещё 2 байта с контрольной суммой.
У меня есть буфер:
AnsiString buf = "\x11\xFC\x50";

Отправляю буфер функции и получаю строки:
AnsiString LoByte, HiByte;
LoByte = CRC(buf, 0); // 27
HiByte = CRC(buf, 1); // F6

И вот вопрос, как мне правильно подцепить эти два байта к переменной buf?
Пробовал и buf = buf + AnsiString("\x") + AnsiString(LoByte);
и buf.c_str() = buf.c_str() + Char("\x") + Char(LoByte.c_str());
всё равно при передаче данных в comport из buf, нормальные 3 байта 11FC50 и ещё \x27\xF6
Помогите кто чем может, а то уже даже незнаю куда копать.

26.11.06 22:55: Перенесено модератором из 'C/C++' — Павел Кузнецов
Re: AnsiString & HEX
От: mrdemon  
Дата: 23.11.06 11:55
Оценка:
LoByte имеет строку 27 (LoByte = "27"), а buf у меня содержит 3 байта (0x11 0xFC 0x50). Мне надо LoByte превести к виду 0x27 и добавить в buf

Помогите пожалуйста, а то уже 2 дня мучаюсь и не как немогу понять что и как делать
Re[2]: AnsiString & HEX
От: FDSC Россия consp11.github.io блог
Дата: 23.11.06 11:58
Оценка:
Здравствуйте, mrdemon, Вы писали:

M>LoByte имеет строку 27 (LoByte = "27"), а buf у меня содержит 3 байта (0x11 0xFC 0x50). Мне надо LoByte превести к виду 0x27 и добавить в buf


M>Помогите пожалуйста, а то уже 2 дня мучаюсь и не как немогу понять что и как делать


Зачем ты LoByte делаешь AnsiString, кто тебе мешает использовать тип char?
Re: AnsiString & HEX
От: np9mi7 Россия  
Дата: 23.11.06 14:59
Оценка:
Здравствуйте, mrdemon, Вы писали:

M>LoByte = CRC(buf, 0); // 27

M>HiByte = CRC(buf, 1); // F6

Какая сигнатура у CRC? Что это объект с оператором приведения типов или функция. Если объект — где описание, если функция — дай сигнатуру;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
"В любое мгновение принятия решения, лучшее, что вы можете сделать, это принять правильное решение; следующим лучшим вариантом будет принять неправильное решение, худший вариант – не принимать решения совсем" (c) Теодор Рузвельт.
Re: AnsiString & HEX
От: Кодт Россия  
Дата: 24.11.06 11:08
Оценка: +2
Здравствуйте, mrdemon, Вы писали:

M>Програмлю в Builder C++ 6. Появилась необходимость добавление к запросу ещё 2 байта с контрольной суммой.

M>У меня есть буфер:
M>AnsiString buf = "\x11\xFC\x50";

M>Отправляю буфер функции и получаю строки:

M>AnsiString LoByte, HiByte; 
M>LoByte = CRC(buf, 0); // 27
M>HiByte = CRC(buf, 1); // F6

По-видимому, CRC возвратило строки "27" и "F6", т.е. шестнадцатеричные коды. Что за, не побоюсь этого слова, идиотский программный интерфейс? Почему нельзя было возвращать сразу одно 2-байтовое число? Или там какие-то подпольные преобразования типов к строкам, которые непонятны из приведённого тобой кода. Покажи объявление CRC.

M>И вот вопрос, как мне правильно подцепить эти два байта к переменной buf?

M>Пробовал и buf = buf + AnsiString("\x") + AnsiString(LoByte);

Ты склеиваешь buf + "\x" + "27" + "\x" + "F6". Кстати, "\x" — некорректная запись: такого эскейпа нет (есть \xHH где HH — шестнадцатеричные цифры) и компилятор должен выругаться.
Результат — "\\x27\\xF6"

M>и buf.c_str() = buf.c_str() + Char("\x") + Char(LoByte.c_str());


А это вообще что-то левое: buf.c_str() возвращает указатель на символы, к указателю прибавляешь два числа (смещаешь его) и пытаешься присвоить результат значению-указателю.

M>всё равно при передаче данных в comport из buf, нормальные 3 байта 11FC50 и ещё \x27\xF6

M>Помогите кто чем может, а то уже даже незнаю куда копать.

Копать в сторону книг, где объясняются сишные строки. Почему склеивание "\\x" и "27" не даёт строку из одного символа с кодом 0x27.
И ещё копать в сторону определения CRC.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[2]: AnsiString & HEX
От: np9mi7 Россия  
Дата: 24.11.06 13:32
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Что за, не побоюсь этого слова, идиотский программный интерфейс?


Согласен. Использовать Boost.CRC Library и не знать подобного рода проблем. Ну или в крайнем случае руками;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
"В любое мгновение принятия решения, лучшее, что вы можете сделать, это принять правильное решение; следующим лучшим вариантом будет принять неправильное решение, худший вариант – не принимать решения совсем" (c) Теодор Рузвельт.
Re[2]: AnsiString & HEX
От: FDSC Россия consp11.github.io блог
Дата: 24.11.06 17:49
Оценка:
Здравствуйте, Кодт, Вы писали:


К>Ты склеиваешь buf + "\x" + "27" + "\x" + "F6". Кстати, "\x" — некорректная запись: такого эскейпа нет (есть \xHH где HH — шестнадцатеричные цифры) и компилятор должен выругаться.

К>Результат — "\\x27\\xF6"

Я ему ещё в Delphi & Builder посоветовал почитать Escape Sequences Он не понял...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.