Вверх ↑
Этот топик читают: Гость
Ответов: 1341
Рейтинг: 31
#16: 2019-07-12 01:10:08 ЛС | профиль | цитата
Galkov писал(а):
И не надо. Не твое это...
Это для тех, у кого есть (как минимум) стремление понимать написанное.
К копипастингу это не имеет никакого отношения.

Да, и это все не предмет обсуждения, это просто достоверная информация.



Смешно, что то я не нашел ни в Дельфи ни в KOL этой и подобной функции..., о чем речь то??
карма: 2

0
Ответов: 8887
Рейтинг: 823
#17: 2019-07-12 10:12:48 ЛС | профиль | цитата
Rysik писал(а):
..я не нашел ни в Дельфи ни в KOL этой и подобной функции..

Такая функция никому не нужна, вид числа в компьютере хоть в "0/1", хоть в "HEX" (HEX лишь сокращённый вид 1/0) понятен только для компьютера, а для человека, даже если он знает что означает каждый бит, бесполезен.
ФорматЧисла.jpg
карма: 19

0
Ответов: 1341
Рейтинг: 31
#18: 2019-07-14 17:50:11 ЛС | профиль | цитата
Леонид писал(а):
Такая функция никому не нужна


Нужна, очень и не одному мне)

Hex2Int64

function Hex2Int64(st:string):int64;
var
i,ln:word;
begin
st := LowerCase(st);
Result := 0;
ln := Length(st);
if ln > 0 then
for i := 1 to ln do
case st[i] of
'0'..'9': Result := Result shl 4 + ord(st[i]) - 48;
'a'..'f': Result := Result shl 4 + ord(st[i]) - 87;
else break;
end;
end;

а вот обратно как? из int64 в hex

Редактировалось 3 раз(а), последний 2019-07-14 17:51:04
карма: 2

0
Ответов: 4621
Рейтинг: 746
#19: 2019-07-15 10:47:07 ЛС | профиль | цитата

function Int64ToHex(Value: Int64; Digits: Integer): string;
const
HexDigitChr: array[0..15] of Char = ( '0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F' );
var
Buf: array[0..16] of Char;
Dest : PChar;
begin
Dest := @Buf[16];
Dest^ := #0;
repeat
Dec(Dest);
Dest^ := '0';
if Value <> 0 then
begin
Dest^ := HexDigitChr[Value and $F];
Value := Value shr 4;
end;
Dec(Digits);
until (Value = 0) and (Digits <= 0);
Result := Dest;
end;
карма: 26

0
Ответов: 1341
Рейтинг: 31
#20: 2019-07-15 12:57:38 ЛС | профиль | цитата
Netspirit, да заглядывался на неё уже, но почему то не смог выкрутиться и совместить опять же типы Int64 и I64


Int64_2Hex

Add(InlineCode,748906,616,231)
{
@Hint=#9:Hex2Int64|
@Color=11206570
WorkPoints=#12:doInt64_2Hex|
EventPoints=#12:onInt64_2Hex|
DataPoints=#4:strr|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|0:|10: private|0:|9: public|15: strr:String;|28: onInt64_2Hex:THI_Event;|57: procedure doInt64_2Hex(var _Data:TData; Index:word);|0:|5: end;|0:|0:|0:|14:implementation|0:|42:function Int64_2Hex(Value: Int64): string;|5:const|72: HexDigitChr: array[0..15] of Char = ( '0','1','2','3','4','5','6','7',|74: '8','9','A','B','C','D','E','F' );|3:var|29: Buf: array[0..16] of Char;|15: Dest : PChar;|18: Digits: Integer;|5:begin|16: Digits := (2);|19: Dest := @Buf[16];|14: Dest^ := #0;|8: repeat|14: Dec(Dest);|17: Dest^ := '0';|22: if Value <> 0 then|9: begin|41: Dest^ := HexDigitChr[Value and $F];|27: Value := Value shr 4;|8: end;|16: Dec(Digits);|38: until (Value = 0) and (Digits <= 0);|17: Result := Dest;|4:end;|0:|0:|35:procedure THiAsmClass.doInt64_2Hex;|0:|3:var|9:ss:Int64;|10:sn:String;|0:|5:begin|22:ss := Str2Int64(strr);|21:sn := Int64_2Hex(ss);|30:_hi_onEvent(onInt64_2Hex, sn);|4:end;|0:|4:end.|
}


(56) Error: Incompatible types: 'Int64' and 'I64'

Редактировалось 1 раз(а), последний 2019-07-15 12:58:11
карма: 2

0
Ответов: 4621
Рейтинг: 746
#21: 2019-07-15 13:12:23 ЛС | профиль | цитата
Родное 8-байтовое целое в Delphi - это Int64. А I64 - это самодельный суррогат в KOL (используется в некоторых случаях). Используй Int64.
В файле hiStreamConvertor.pas есть функции "Bin2Hex" и "Hex2Bin", которыми можно преобразовывать данные любой размерности - указываешь указатель на данные и размер. Нужно файл подключить в uses.

Редактировалось 2 раз(а), последний 2019-07-15 13:15:18
карма: 26

0
Ответов: 1341
Рейтинг: 31
#22: 2019-07-15 13:31:46 ЛС | профиль | цитата
Netspirit писал(а):
Используй Int64.


Как его использовать если функция Str2Int64 выводит тип данных I64 ?
карма: 2

0
Ответов: 4621
Рейтинг: 746
#23: 2019-07-15 13:36:37 ЛС | профиль | цитата
Это она у тебя выводит. Напиши её по-человечески - будет выводить в Int64.
Если уж так хочешь, можешь попробовать:
var
N: I64;
S: string;
begin
N := ... // Откуда у тебя оно там берется в I64
S := Int64ToHex(Int64(N), 16);
end;

Редактировалось 2 раз(а), последний 2019-07-15 13:38:53
карма: 26

0
Ответов: 1341
Рейтинг: 31
#24: 2019-07-15 14:45:06 ЛС | профиль | цитата
в таком исполнении сам код должен работать, но уже проблема происходит на уровне схемы,
Error: Incompatible types: 'Int64' and 'THI_Event'


компонент

unit hiConvertor64;  { Convertor64 }

interface

uses Kol,Share,Debug;

type
THIConvertor64 = class(TDebug)
private
public
_data_Data:Int64;
_event_onResult:THI_Event;

procedure _work_doConvert(var _Data:TData; Index:word);
end;


implementation

function Int64ToHex(Value: Int64; Digits: Integer): string;
const
HexDigitChr: array[0..15] of Char = ( '0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F' );
var
Buf: array[0..16] of Char;
Dest : PChar;
begin
Dest := @Buf[16];
Dest^ := #0;
repeat
Dec(Dest);
Dest^ := '0';
if Value <> 0 then
begin
Dest^ := HexDigitChr[Value and $F];
Value := Value shr 4;
end;
Dec(Digits);
until (Value = 0) and (Digits <= 0);
Result := Dest;
end;

procedure THIConvertor64._work_doConvert;

var
S:String;

begin
S := Int64ToHex(Int64(_data_Data), 16);
_hi_OnEvent(_event_onResult, S);
end;


end.

Редактировалось 1 раз(а), последний 2019-07-15 14:45:14
карма: 2

0
Ответов: 4621
Рейтинг: 746
#25: 2019-07-15 14:59:17 ЛС | профиль | цитата
_data_Data является структурой типа THI_Event - там несколько разных полей, она не приводится к другим типам, в т.ч. и Int64.

У нас нет "родной" поддержки Int64 на уровне схем. Нужно передавать в виде Double - кажется, с сужением диапазона Int64:
procedure THIConvertor64._work_doConvert(var _Data: TData; Index: Word);
var
I: Int64;
S: string;
begin
I := Trunc(ReadReal(_Data, _data_Data)); // Для чтения данных из точек используются специальные функции модуля Share.pas - см. другие компоненты
S := Int64ToHex(I, 16);
_hi_OnEvent(_event_onResult, S);
end;

Редактировалось 1 раз(а), последний 2019-07-15 15:01:06
карма: 26

0
Ответов: 1341
Рейтинг: 31
#26: 2019-07-15 15:12:17 ЛС | профиль | цитата
Netspirit писал(а):
I := Trunc(ReadReal(_Data, _data_Data));



Работает, конвертирует , Спасибо
карма: 2

0
Ответов: 5
Рейтинг: 0
#27: 2020-03-28 10:51:38 ЛС | профиль | цитата
Rysik писал(а):
Netspirit писал(а):
I := Trunc(ReadReal(_Data, _data_Data));



Работает, конвертирует , Спасибо

Добрый день!
Подскажите пожалуйста как из этого кода сделать компонент ?
карма: 0

0
27
Сообщение
...
Прикрепленные файлы
(файлы не залиты)