![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
строку в набор байт
Skandinav © (2013-03-05 15:56:00)Есть строка, нужно перевести ее в набор байт и присвоить cardinal-переменной. Как присвоить не пойму. Подскажите, пожалуйста.
Inovet (2013-03-05 18:17:00) [1]> [7] Ega23 © (05.03.13 18:05)
> UTF-16 и ты.ды (насчёт ты.ды - не уверен).
UTF-16 little endian
UTF-16 big endian
Ega23 (2013-03-05 18:05:00) [2]
> в текстовом файле храняться строковое значение длиной 4
> символа.
Также обрати внимание: текстовый файл может быть в разных кодировках: OEM, ANSI, UTF-8, UTF-16 и ты.ды (насчёт ты.ды - не уверен).
MBo (2013-03-05 17:18:00) [3]Обрати внимание:
строка "ABCD" хранится в памяти как #$65 #$66 #$67 #$68
Cardinal число $65666768 хранится в обратном порядке! $68 #$67 #$66 #$65
Skandinav (2013-03-05 17:12:00) [4]задача такая:
в текстовом файле храняться строковое значение длиной 4 символа.
ABCD
в программе есть константа, которая представляет некоторее строковое значение, которое может быть в файле ввиде байт.
const
ABCD = $65666768;
нужно считать строковое значение из файла и проверить совпадает ли оно с константой. Как сделать сравнение.
//S := GetStrFromFile;
//if ABCD = ???
icWasya (2013-03-05 16:37:00) [5]Как вариант
1)
var V:packed record
case boolean of
true:(A: array [1..4] of Byte;);
false:(C: Cardinal;);
end;
for I := 1 to Length(S) do
V.A[I] := Ord(S[I]);
Result:= V.C;
2)
var
A: array [1..4] of Byte;
C: Cardinal; absolute A;
end;
for I := 1 to Length(S) do
A[I] := Ord(S[I]);
Result:= C;
MBo (2013-03-05 16:09:00) [6]Строка и есть адрес набора байтов. Что именно сделать нужно - неясно.
Вот варианты для начала обсуждения:
var
s: AnsiString;
u: Cardinal;
s :='abcdef';
u := PCardinal(@s[1])^;
Move(s[1], u, SizeOf(u);
Skandinav (2013-03-05 16:08:00) [7]строку в массив байт перевожу, а как присвоить массив переменной cardinal непойму никак
procedure TForm1.FormCreate(Sender: TObject);
var
S: string;
A: array [1..4] of Byte;
I: Integer;
C: Cardinal;
begin
S := 'ABCD';
for I := 1 to Length(S) do
A[I] := Ord(S[I]);
//C := ???
end;
brother (2013-03-05 16:07:00) [8]пример строки?