Сформировать пакет из бинарного кода и кодов ascii

rene
Offline
Зарегистрирован: 21.01.2014

Доброго времени суток!

Пишу клиент-серверное приложение. По ходу работы клиент должен сформировать сетевой пакет, причем первые 6 байт это бинарный код, а деалее должны идти символы ascii. Пытался делать так:

  byte buf[] = {
  0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 'H' , 'e' , 'l', 'l', 'o'
};

    if (client.connected()) {
    client.print(buf);
}

но получаю ошибку: call of overloaded 'print(byte [11])' is ambiguous

Что то более ничего в голову не идет, как еще можно собрать строку, что бы ее client.print принял?

Datak
Offline
Зарегистрирован: 09.10.2014

rene пишет:

получаю ошибку: call of overloaded 'print(byte [11])' is ambiguous

Что то более ничего в голову не идет, как еще можно собрать строку, что бы ее client.print принял?

Строка собрана вполне правильно.

А компилятор, в принципе, жалуется не на то что не может что-то скомпилить, а наоборот - может скомпилить двумя (или более) способами, и не знает какой из них выбрать.

Надо посмотреть, какие варианты функции print описаны в .h-файле, выбрать из них подходящий для этого случая, и помочь компилятору определиться. Скорее всего, надо явно указать тип аргумента. Или явно добавить ещё один "неявный" аргумент.

Сам смотреть не полезу, но наверно как-нибудь так будет:







client.print( ( char* )buf );

или 







client.print( buf, 11 );

Думаю, второй вариант, т.к. первый, скорее всего, считает признаком конца строки нулевой байт, и поэтому не сможет вывести строку, содержащую нули где-то внутри.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Возможно также, что вместо client.print() следует пользоваться чем-то вроде client.write(). Вам ведь не нужно форматное преобразование первых байтов.

rene
Offline
Зарегистрирован: 21.01.2014

Вот так вот получилось:

byte  buf[] = {
  0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 'H' , 'e' , 'l', 'l', 'o'
};

if (client.connected()) {
  client.write(buf, 11);
}

Остальные варианты не работают. Всем спасибо!

Datak
Offline
Зарегистрирован: 09.10.2014

andriano пишет:

Возможно также, что вместо client.print() следует пользоваться чем-то вроде client.write().

Даже больше похоже на правду.

print, всё-таки, обычно заточен под вывод именно строк - то есть последовательности печатаемых символов с непечатаемым нулём в конце.

-----

Upd: Вот, почти угадал. :)