powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / JavaScript=>Delphi
48 сообщений из 48, показаны все 2 страниц
JavaScript=>Delphi
    #39610147
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть исходник для работы с моим железом, но он на JS
помогите с данными разобраться

объявлена переменная типа ByteString
Код: javascript
1.
 this.data0201 = new ByteString("", HEX);



далее в нее считываются данные, и получение значений этого массива происходит вот так:

Код: javascript
1.
2.
3.
4.
5.
      ["ROOT",             0x0201, 2,    ""],
      ["Identity_1",       0x0201, 0x21, "utf8"],
      ["Identity_2",       0x0201, 0x22, "utf8"],
      ["Identity_3",       0x0201, 0x23, "utf8"],
      ["BirthDate",        0x0201, 0x24, "date"],



что это за тип такой, что такому типу соответствует в Delphi и как с этим работать хоть примерно?
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610185
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то типа
Код: pascal
1.
2.
Var
  Buf: array of Byte;


?
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610186
edruzenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
json
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610187
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edruzenkojson

нет
там данные приходят в бинарном виде, одной строкой
если сделать целиком над строкой вот такое:
Код: pascal
1.
UTF8ToString(RawByteString(input))



то на выходе получим длинную строку со вкраплениями нужного текста
никаких json-овских скобок там нет

типа вот такого:
автор% _$ � 03_1 РОФ_2'Российская Федерация_) РОСТОВ-Н/Д_* �
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610199
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11что-то типа
Код: pascal
1.
2.
Var
  Buf: array of Byte;


?

тоже была гипотеза про массив байтов
но хотел узнать у знающего ALL, может кто точно знает, без гипотез

тип-то конкретно описан: ByteString
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610209
genokто на выходе получим длинную строку со вкраплениями нужного текстапокажи не строку а её содержимое в hex
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610217
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
джиэсделфиgenokто на выходе получим длинную строку со вкраплениями нужного текстапокажи не строку а её содержимое в hex

автор5F 26 10 36 31 35 31 37 31 30 38 38 36 30 30 30 34 36 30 5F 21 12 420 2018 420 A0 420 452 420 45E 420 408 420 490 420 98 420 45C 420 452 5F 22 0C 420 201C 420 452 420 203A 420 98 420 45C 420 452 5F 23 14 420 45C 420 98 420 459 420 45B 420 203A 420 452 420 2022 420 2019 420 45C 420 452 5F 25 01 02 5F 24 04 13 08 19 201A 7F 30 33 5F 31 06 420 A0 420 45B 420 A4 5F 32 27 420 A0 420 455 421 403 421 403 420 451 420 2116 421 403 420 454 420 B0 421 40F 20 420 A4 420 B5 420 491 420 B5 421 402 420 B0 421 2020 420 451 421 40F 5F 29 12 420 A0 420 45B 420 40E 420 45E 420 45B 420 2019 2D 420 45C 2F 420 201D 5F 2A 04 452 00
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610219
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор 5F 26 10 36 31 35 31 37 31 30 38 38 36 30 30 30 34 36 30 5F 21 12 420 2018 420 A0 420 452 420 45E 420 408 420 490 420 98 420 45C 420 452 5F 22 0C 420 201C 420 452 420 203A 420 98 420 45C 420 452 5F 23 14 420 45C 420 98 420 459 420 45B 420 203A 420 452 420 2022 420 2019 420 45C 420 452 5F 25 01 02 5F 24 04 13 08 19 201A 7F 30 33 5F 31 06 420 A0 420 45B 420 A4 5F 32 27 420 A0 420 455 421 403 421 403 420 451 420 2116 421 403 420 454 420 B0 421 40F 20 420 A4 420 B5 420 491 420 B5 421 402 420 B0 421 2020 420 451 421 40F 5F 29 12 420 A0 420 45B 420 40E 420 45E 420 45B 420 2019 2D 420 45C 2F 420 201D 5F 2A 04 452 00

вот блок 1
5F26 и его данные

автор5F 26 10 36 31 35 31 37 31 30 38 38 36 30 30 30 34 36 30 5F 21 12 420 2018 420 A0 420 452 420 45E 420 408 420 490 420 98 420 45C 420 452 5F 22 0C 420 201C 420 452 420 203A 420 98 420 45C 420 452 5F 23 14 420 45C 420 98 420 459 420 45B 420 203A 420 452 420 2022 420 2019 420 45C 420 452 5F 25 01 02 5F 24 04 13 08 19 201A 7F 30 33 5F 31 06 420 A0 420 45B 420 A4 5F 32 27 420 A0 420 455 421 403 421 403 420 451 420 2116 421 403 420 454 420 B0 421 40F 20 420 A4 420 B5 420 491 420 B5 421 402 420 B0 421 2020 420 451 421 40F 5F 29 12 420 A0 420 45B 420 40E 420 45E 420 45B 420 2019 2D 420 45C 2F 420 201D 5F 2A 04 452 00

далее блок 2
5F21 и его данные
ну и т.д.

блок 1 - это просто цифры, блок 2 - текст в UTF8
как с этим работать, чтобы без колхоза, а так же кратко, как и в JS?
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610223
genok, пошагово посмотри в свой JS - увидишь сколько там колхоза за рюшечками ))

И это не hex, это utf8_symbols to hex. Посмотри на raw_bytes to hex и увидишь закономерности ...

Потом наколхозь на Delphi и наслаждайся решением непонятной задачи.
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610227
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genokчто это за тип такой, что такому типу соответствует в Delphi и как с этим работать хоть примерно?
Microsoft JS (у меня) типа ByteString не знает. Судя по названию, это просто строка байт (попробуйте ее превратить в hex dump методом toString). Аналогом в дельфи мо;ет быть AnsiString, RawByteString или String в древних дельфях.
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610290
stanilar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genok
Код: javascript
1.
new


А это точно не самопальный js объект?

genokдалее в нее считываются данные, и получение значений этого массива происходит вот так:
С js не прокатывает, как с паскалем, однозначно интерпретировать кусок кода. Фиг знает что Вы с бабелем делаете...
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610464
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
джиэсделфиПотом наколхозь на Delphi и наслаждайся решением непонятной задачи.

задача вполне понятна - получение данных со смарт-карты с использованием команд APDU
выдаются данные вот такими кусками, причем разнотипные (utf8, datetime и т.п.) в одной строке Ansistring
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610541
genokзадача вполне понятна - получение данных со смарт-картыА я то думал это "моё железо".

с использованием команд APDUО, новое слово которого нет в iнет?

выдаются данные вот такими кусками, причем разнотипные (utf8, datetime и т.п.) в одной строке Ansistring"0x5F" говорит о том, что тип данных в этом поле ты должен знать сам. Кроме того, там дальше идентификатор поля и длина. Так что, бери лопату и в поле!
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610872
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote genok]автор 5F 26 10 36 31 35 31 37 31 30 38 38 36 30 30 30 34 36 30

вот блок 1
5F26 и его данные

блок 1 - это просто цифры

не совсем так, это цифры текстом, скорее всего в кодировке UTF-8, и перед ними один байт с длиной $10 = 16 каких-то единиц (сиволов? байтов? слов?)
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39610886
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
[quote Arioch]genokавтор 5F 26 10 36 31 35 31 37 31 30 38 38 36 30 30 30 34 36 30

вот блок 1
5F26 и его данные

блок 1 - это просто цифры

не совсем так, это цифры текстом, скорее всего в кодировке UTF-8, и перед ними один байт с длиной $10 = 16 каких-то единиц (сиволов? байтов? слов?)
судя по куску, $10 - это длина блока, в данном случае 16 байт (=$10)
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611256
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

в данном случае так совпало, что в UTF-8 символы цифр занимают по одному байту, так что мы просто не можем различить эти случаи

а считать длину второго блока в буквах и байтах мне просто лень
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611261
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ariochdefecator,

в данном случае так совпало, что в UTF-8 символы цифр занимают по одному байту, так что мы просто не можем различить эти случаи

а считать длину второго блока в буквах и байтах мне просто лень

а мне вообще лень считать, потому что тут не HEX:
автор30 5F 21 12 420 2018 420 A0 420 452 420 45E 420 408 420 490 420 98 420 45C 420 452 5F 22 0C
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611284
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

и это тоже, потому я собирался упомянуть UTF-16 (но поскольку у нас не JAva, а JScript не стал)

вполне возможно это таки HEX, но двубайтовых элементов, нeсмотря на "00" и "04"

просто представь, что стандартное IntToHex( Ord(ch), 2 ) компиляли сначала в старой Дельфи (char=AnsiChar), а потом перекомпиляли в новой (char=Widechar)
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611294
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ariochdefecator,

и это тоже, потому я собирался упомянуть UTF-16 (но поскольку у нас не JAva, а JScript не стал)

вполне возможно это таки HEX, но двубайтовых элементов, нeсмотря на "00" и "04"

просто представь, что стандартное IntToHex( Ord(ch), 2 ) компиляли сначала в старой Дельфи (char=AnsiChar), а потом перекомпиляли в новой (char=Widechar)

при чём тут это ?
компилять могла где угодно, формат HEX - это не
420 2018 420 A0 420

а примерно вот так:
42 02 01 84 20 A0 42 00
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611295
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

вообще говоря, "формат HEX" - это просто последовательность 16-ричных чисел с разделителями в человеко-читаемой форме. И текста программы, которая в данном случае его генерила, со всеми ее умолчаниями и багами, у нас нет.
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611302
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch И текста программы, которая в данном случае его генерила, со всеми ее умолчаниями и багами, у нас нет.

вот текст
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
function Bin2HexExt(const input:string; const spaces: boolean): string;
var
   loop      : integer;
   hexresult : string;
begin
     hexresult := '';
     for loop := 1 to Length(input) do
        begin
        hexresult := hexresult + IntToHex(Ord(input[loop]),2);
        if spaces then hexresult := hexresult + ' ';
        end;
     result := AnsiUpperCase(hexresult);
end;
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611306
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochне совсем так, это цифры текстом, скорее всего в кодировке UTF-8, и перед ними один байт с длиной $10 = 16 каких-то единиц (сиволов? байтов? слов?)

круто, я сам не допер что это длина
спасибо
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611331
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genok,

а что там еще могло быть?
или с другого конца, а где ещё могла быть длина?
genokвот текст

Код: pascal
1.
function Bin2HexExt



я говорил, про реальные текст, который из твоего JS-объекта порождает вот это вот "5F 26 10 36 31 35 31 ... "

или ты этот hex-текст на Delphi генеришь из двоичного буфера? а Delphi какой версии ?
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611335
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611363
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochgenok,

https://ru.wikipedia.org/wiki/Tag-length-value

спасибо за ликбез

подскажите тогда еще вот такую вещь:
автор5F 24 04 13 08 19 201A 7F 30 33
здесь зашифрована дата 13.08.1982
как её можно получить?

для получения UTF8 кусков сделал такой говнокод:
авторprocedure TForm1.Button2Click(Sender: TObject);
var str: string;
P, L: integer;
begin
str:=inputString;
p:=pos(Hex2Bin('$5F$21'), str);
L:=Ord(Str[p+2]);
memo1.Lines.Add(UTF8ToAnsi(RawByteString(copy(str, p+3, L))));
end;
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611386
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторstr:=inputString;

откуда вы это берёте ?

Ariochа Delphi какой версии ?

не ответили....

авторRawByteString

судя по этому - Дельфи юникодная, 2009+, в ней нельзя дуриком двоичные данные в строки пихать
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611390
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genokздесь зашифрована дата 13.08.1982
как её можно получить?

разобраться как устроены ваши данные и написать для них парсер

для начала мы даже не знаем из каких атомов данные состоят - байты, дву-байты, 4-байты, переменной длинны блоки - непонятно

откуды вы берете свои hex-числа, какие преобразования над ними проводятся до, какие после

вполне возможно ,что чатьс аднный уже испорчена
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611393
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genokтам данные приходят в бинарном виде, одной строкой

вот эта вот фраза - невозможная в принципе

так не бывает

в юникодной Дельфи в строке - текст, а не бинарные данные

так что придется вам начинать с самого начала, танцевать от печки, разбираться как именно и в каких именно форматах и кто передает вам в программу данные
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611395
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochоткуда вы это берёте ?


Delphi XE2

беру данные отсюда:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
inputString=pcsc.GetResponseFromCard(Hex2Bin('00b00003a7'))


function TPCSCConnector.GetResponseFromCard(const APdu: string): string;
var
  RetVar : cardinal;
  SBuf   : AnsiString;
  SLen   : cardinal;
  RBuf   : AnsiString;
  RLen   : cardinal;
  Ppci   : Pointer;
begin
SBuf := APdu;
RBuf := StringOfChar(#0,MAXAPDULENGTH);
if Length(SBuf) <= MAXAPDULENGTH then
  begin
  case FAttrProtocol of
    SCARD_PROTOCOL_T0 : Ppci := @SCARD_PCI_T0;
    SCARD_PROTOCOL_T1 : Ppci := @SCARD_PCI_T1;
    else                Ppci := nil;
    end;
  SLen := Length(APdu);
  RLen := Length(RBuf);
  RetVar := SCardTransmit(FCardHandle, Ppci, Pointer(SBuf), SLen, nil, Pointer(RBuf), @RLen);
  if RetVar = SCARD_S_SUCCESS then
    begin
    Result := Copy(RBuf,1,RLen);
    end else
    begin
    Result := '';
    if Assigned(FOnError) then FOnError(Self, esTransmit, RetVar);
    end;
  end;
end;

function SCardTransmit;                   external WinSCardDLL name 'SCardTransmit';
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611397
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ваша программа хз что делает - 21082769 - и хз как хз что получает в ответ, и как тут дальше гадать?..
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611398
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genok
Код: pascal
1.
function SCardTransmit;     



а где определение функции ?
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611401
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genokinputString=pcsc.GetResponseFromCard( Hex2Bin('00b00003a7') )


function TPCSCConnector.GetResponseFromCard(const APdu: string ): string;

нельзя так делать в Юникодной Дельфи.
вам в этом случае возможно повезло - две ошибки взаимнно уничтожились. Но это просто вопрос везения, случайности.

читайте какие-нибудь FAQ про переход Delphi на Юникод в 2009 и про работу в Deдphi с бинарными данными

или хотя бы последную фразу в 21235857

но лучше найдите статьи и прочитайте
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611404
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genok
Код: pascal
1.
if Length(SBuf) <= MAXAPDULENGTH then



А если нет, то что тогда?

ответ, тогда значение параметра Result останется таким, какое было передано из вызывающей программы, и о том, что была ошибка вообще никто не узнает.

судя по всему, писалось на коленке и абы как, вероятно "код с форума"
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611406
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochgenok
Код: pascal
1.
function SCardTransmit;     



а где определение функции ?

вот все что есть:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   function SCardTransmit(hCard: LongInt; pioSendPci: Pointer; pbSendBuffer: PByte;
                          dwSendLength: DWORD; pioRecvPci: Pointer; pbRecvBuffer: PByte;
                          pcbRecvLength: PDWord): LongInt; stdcall;

(* WindowsXP winscard.dll
   8/23/2001   0:00          93,184  winscard.dll
   Exports from WinSCard.dll
   63 exported name(s), 63 export addresse(s).  Ordinal base is 1.
    Ord. Hint Name
    ---- ---- ----
      60 003B SCardTransmit
    *)
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611408
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genok
Код: pascal
1.
  Result := Copy(RBuf,1,RLen);



вот здесь вы скорее всег опортите данные, и дальше в них смотреть большого смысла не имеет
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611411
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genok
Код: pascal
1.
pbSendBuffer: PByte;



то есть там байты

если делать по человечески, то все данные надо передавать через TBytes оно же TArray<Byte> и не пользоваться строками вообще. Хотя бы для того, чтобы самому себя не запутывать ,где у вас тексты ,а гед довичные буферы.

если делать халявно - то надо использовать AnsiChar/PAnsiChar/AnsiString или RawbyteString и тщательно следить, чтобы ниоткуда и нигде не вылезло Char=WideChar/PChar=PWideChar/String=UnicodeString/WideString

а вообще, в самом деле, вам надо почитать как устроены внутрений типы Delphi (длинные строки и динамические массивы), что изменилось в Delphi 2009, и как теперь "по канону" полагается работать с бинарными данными.

После этого либо вы делаете как теперь принято, либо делаете "как в древних Delphi", но тогда крайне тщательно следите чтобы нигде не использовать новых типов и форматов ,появившихся в 2009

выбори за вами


genok
Код: pascal
1.
Exports from WinSCard.dll



это часть самой Windows или какой-то библиотеки для карты, любопытно

я бы возможно посмотрел последнюю версибю JEDI Win API Library - хотя она сама по себе довольно громоздкая
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611413
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch
но лучше найдите статьи и прочитайте

лет 5 назад перешел с Delphi7 на DelphiXE2, читал все это и вроде даже что-то понял, потому как получилось перенести проекты на юникодную RAD
но к нынешнему моменту в голове снова вакуум, увы.
видать, придется снова читать

в любом случае, спасибо за попытку помочь
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611417
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochэто часть самой Windows или какой-то библиотеки для карты, любопытно

судя по гуглу, это часть стандартного интерфейса, которые есть и в Windows и во всех других операционках

https://msdn.microsoft.com/library/windows/desktop/aa379804.aspx
https://www.codeproject.com/Questions/354281/How-to-send-APDU-command-using-SCardTransmit

остаётся читать и разбираться в смысле происходящего
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611423
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот нашел кусок JS который получает текст или дату, в зависимости от типа ожидаемых данных

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 OutlineCard.prototype.printTLV = function(filenum, tlv, sub) {
  var tt = tlv.getTag() >> 8;
  var ta = tlv.getTag() & 0xFF;
  var value = tlv.getValue();
  if (this.tag_ref.hasOwnProperty([filenum, ta])) {
    var namtp = this.tag_ref[[filenum, ta]];
    var namsect = sub + namtp[0] + "_" + namtp[1];
    if (namtp[2] == "utf8") {
      print(namsect + ": " + value.toString(UTF8));
    } else if (namtp[2] == "date") {
      var s = "" + value.toString(HEX);
      print(namsect + ": " + s.substr(0, 2) + "." + 
        s.substr(2, 2) + "." + s.substr(4));
    }
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611436
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genok
Код: javascript
1.
 tlv



какая знакомая аббревиатура, а?
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611440
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genokвот нашел кусок JS

чтобы понять этот кусок вам надо понять, в каком виде данные до него дошли

то есть разобраться не только с двоичным форматом (который наверняка описан и в международном стандарте смарт-карт, и в Windows API и много где ещё), но и со всеми трансформациями данных, происходящими с этим буфером на пути к этому коду

начните с того, чтобы получать/хранить/передавать данные в исходном бинарном "сыром" (raw) виде в юникодной Delphi XE2, не разрушая их

Какой толк пялиться в чей-то код, если вам не к чему этот код применить?
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611445
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
допёр
оказалось, IntToHEX(Ord(ansiString[loop]),2) и IntToHEX(Ord(WideString[loop]),2) дают совершенно разный результат
не пинайте сильно, "рядовой шутник глуп и невежественен"

ну и вид блока с датой выходит таким:
автор5F 24 04 13 08 19 82 7F 30 33

в общем, дату увидел, уже хорошо
строковые данные тоже получил

теперь с потерями надо разобраться, конец строки явно режется
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611446
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genokоказалось, IntToHEX(Ord(ansiString[loop]),2) и IntToHEX(Ord(WideString[loop]),2) дают совершенно разный результат

ага, нонче за тилипата я - 21240818

как же это тилипает!
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611447
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор13 08 19 82 7F 30 33

это 7 байтов, на 4 не делится
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611462
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochавтор13 08 19 82 7F 30 33

это 7 байтов, на 4 не делится

длина 4 байта к использованию указана, остальное лишнее судя по всему
почему так - не знаю и вряд ли получится разобраться у меня
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611464
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochgenokоказалось, IntToHEX(Ord(ansiString[loop]),2) и IntToHEX(Ord(WideString[loop]),2) дают совершенно разный результат

ага, нонче за тилипата я - 21240818

как же это тилипает!

так и есть, извините)
...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611509
gssbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде Вам ссылки выше давали там все есть, нужно только разобраться.

В конечном итоге у Вас должно получится что то вроде этого:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
unit uWinsCard;

interface

implementation

uses Winapi.Windows;

const
  WinSCardDll = 'WinSCard.dll';

{$MINENUMSIZE 4}

const
 SCARD_SCOPE_SYSTEM   = $0002;
 SCARD_SHARE_SHARED   = $0002;

SCARD_PROTOCOL_T0     = $0001;
SCARD_PROTOCOL_T1     = $0002;
SCARD_PROTOCOL_RAW    = $0004;

type
 SCARDCONTEXT = Integer;
 LPSCARDCONTEXT = ^SCARDCONTEXT;

 SCARDHANDLE  = Integer;
 LPSCARDHANDLE = ^SCARDHANDLE;

 LPCBYTE = Pointer;

type
 TSCARD_IO_REQUEST = packed record
   dwProtocol: DWORD;    // SCARD_PROTOCOL_T0, SCARD_PROTOCOL_T1 or SCARD_PROTOCOL_RAW
   cbPciLength: DWORD;   // Length of this structure
end;

function SCardEstablishContext(dwScope: DWORD;
                               pvReserved1: LPCVOID;
                               pvReserved2: LPCVOID;
                               phContext: LPSCARDCONTEXT): Integer; stdcall; external WinSCardDll;

function SCardConnect(hContext: SCARDCONTEXT;
                      szReader: LPCSTR;
                      dwShareMode: DWORD;
                      dwPreferredProtocols: DWORD;
                      phCard: LPSCARDHANDLE;
                      pdwActiveProtocol: LPDWORD): Integer; stdcall; external WinSCardDll;

function SCardTransmit(hCard: SCARDHANDLE;
                       pioSendPci: Pointer;
                       pbSendBuffer: LPCBYTE;
                       cbSendLength: DWORD;
                       pioRecvPci: Pointer; //LPBYTE
                       pbRecvBuffer: LPBYTE;
                       pcbRecvLength: LPDWORD): Integer; stdcall; external WinSCardDll;

procedure GetResponseAPDU;
 var
  rv: Integer;
  hContext: SCARDCONTEXT;
  hCard: SCARDHANDLE;
  dwActiveProtocol, dwSendLength, dwRecvLength: DWORD;
  pbRecvBuffer: array[0..9] of byte;
 const
  pbSendBuffer: array of byte = ( $C0, $A4, $00, $00, $02, $3F, $00 );
begin
    rv := SCardEstablishContext(SCARD_SCOPE_SYSTEM, nil, nil, @hContext);
    rv := SCardConnect(hContext, 'Reader X', SCARD_SHARE_SHARED,
             SCARD_PROTOCOL_T0, @hCard, @dwActiveProtocol);
    dwSendLength := SizeOf(pbSendBuffer);
    dwRecvLength := SizeOf(pbRecvBuffer);
    rv := SCardTransmit(hCard, SCARD_PCI_T0, pbSendBuffer, dwSendLength,
             nil, pbRecvBuffer, @dwRecvLength);
end;


end.

...
Рейтинг: 0 / 0
JavaScript=>Delphi
    #39611777
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genok,

У вас же там пара строк кода. Ладно хотя бы тысяча была или тысяч десять. Сделайте нормально, то есть всё в массивах байт. Часть вопросов отпадёт сразу же.
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / JavaScript=>Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]