![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Array of Byte в String
Antoha111 © (2007-01-06 14:06:00)Добрый день, уважаемые! Возник тут один вопрос, вроде ерундовый, но чего-то ничего не получается......Вообщем имеется массив байтов. Необходимо этот массив преобразовать к String. Заранее благодарен.
Ihor Osov'yak (2007-01-08 00:35:00) [1]Сообщение Antoha111 © (07.01.07 02:51) [17] противоречит сообщению
Antoha111 © (06.01.07 23:06) [11]
ors_archangel (2007-01-07 17:59:00) [2]Вот до чего дошли, люди сами ответы находят, то же мне, мастера :)
Antoha111 (2007-01-07 02:51:00) [3]Все, проблемма решилась при помощи функции StrPas, долго пришлось порыться в unit'ах......
Всем большое спасибо за участие......Ветка закрыта.....
Antoha111 (2007-01-07 01:51:00) [4]To Anatoly Podgoretsky
А можно поподробнее, что-то не уловил мысль....В смысле присвоением???
try (2007-01-07 01:03:00) [5]
> Antoha111 © (06.01.07 23:06) [11]
> Как его привести к читаемому виду???
Что такое "читаемый вид"?
Anatoly Podgoretsky (2007-01-07 00:29:00) [6]> Antoha111 (06.01.2007 23:48:13) [13]
Зачем мучаться, 16 байтов можно скопировать простым присвоением в цикле.
Antoha111 (2007-01-06 23:48:00) [7]Пробовал я так......но, увы......ничего не выходит....
Степан (2007-01-06 23:31:00) [8]А в чем проблема... Организуешь цикл от 0 до 15, в теле цикла пишешь чтото типа такого:
Line := Line + IntToStr(Buff[I]) + '\';
Если же байты в массиве - коды ANSI, то так:
Line := Line + Chr(Buff[I]);
И все...
Antoha111 (2007-01-06 23:06:00) [9]Я че-то вообще уже запутался.......
Вообщем после опроса устройства возвращается следующий массив /array [0..15] of Byte/, который в приципе должен содержать серийный номер последнего:
(0, 0, 0, 138, 4, 22, 0, 228, 228, 18, 0, 0, 0, 0, 0, 152)
Как его привести к читаемому виду???
palva (2007-01-06 22:29:00) [10]Если допустимо описать приемный массив как массив символов, то можно присвоить массив строке непосредственно.
{$APPTYPE CONSOLE}
var
a: array [0..24] of Char;
s: String;
begin
a[0] := 'a'; a[1] := 's'; a[2] := 'd'; a[3] := Char(0);
s := a;
WriteLn(s); // asd
end.
Данный вариант возможен, если в конце данных не стоит нулевой байт, а длина данных передается как-то иначе. В этом случае нужно дополнительно задать SetLength(s, ...)
palva (2007-01-06 22:22:00) [11]Если в конце данных стоит нулевой байт, то можно так:
{$APPTYPE CONSOLE}
var
a: array [0..24] of byte;
s: String;
begin
a[0] := Ord('a'); a[1] := Ord('s'); a[2] := Ord('d'); a[3] := 0;
s := PChar(@a[0]);
WriteLn(s); // asd
end.
Antoha111 (2007-01-06 22:10:00) [12]Тут начинает, что-то проясняться при использовании Move. Уточнит, пожалуйста, данную процедуру необходимо организовать в цикле??? Т.е. с каждым элементом байтового массива...
Antoha111 (2007-01-06 22:08:00) [13]Данный вариант - первый, что я попробовал.......К сожалению, ничего не выходит........
-DeBUGGeR- (2007-01-06 21:57:00) [14]Должно работать:
[CODE]
var
a:array [0..24] of byte;
s: String;
i: Byte;
begin
s := '';
for i:= 0 to 24 do s := s + Chr(a[i]);
RichEdit.Lines.Add(s);
end;
[/CODE]
Antoha111 (2007-01-06 19:55:00) [15]Извиняюсь, надо было сразу проблемму описать.....
Вообщем работаю с внешним оборудованием (конкретно аналогово-цифровой преобразователь). При опросе общей информации об устройстве возвращает результат (фирма, название и т.д.) в виде array [0..24] of byte . Необходимо вывести полученную информацию на форму в RichEdit, например
ors_archangel (2007-01-06 17:33:00) [16]
> А почему такая уверенность
- поэтому я и поствил знак вопроса в конце [1], а вообще тема = " Array of Byteв String" меня, наверно, сбила с истинного пути :)
Ihor Osov'yak (2007-01-06 17:30:00) [17]to ors_archangel
А почему такая уверенность в том, что индексация массива начнается с 0?
И почему такая уверенность в том, что под "преобразованием" подразумевалось бинарное копирование?
to Antoha111. Уточните вопрос, хотя бы в части, что имеется ввиду под "преобразованием". Можно с примером (преобразования, "на бумажке").
ors_archangel (2007-01-06 16:37:00) [18]А причём здесь WinAPI?
ors_archangel (2007-01-06 14:20:00) [19]setlength(s,length(a)); Move(a[0],s[1],length(s)) ?