Что нового

[Массивы] Работа с бинарными значениями

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Объясните мне, как сравнить два бинарных значения текстовых строк?
Код:
$s = 'Dfcz'
$s1 = 'Мщмф'
$a = Binary(StringToBinary($s))
$a1 = Binary(StringToBinary($s1))
;$c = BinaryToString
msgbox(0,'',$a)
msgbox(0,'',$a1)
if $a1>$a Then
	msgbox(0,'','$a1')
Else
	msgbox(0,'','$a')
EndIf



Не сравнивает...
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Vlasssov [?]
Объясните мне, как сравнить два бинарных значения текстовых строк?
Можно так ?
Код:
#include<String.au3>
$a1 = _StringToHex($s)
$a = _StringToHex($s1)


или :
Код:
$a = StringTrimLeft(StringToBinary($s),2)
$a1 =StringTrimLeft(StringToBinary($s1),2)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
а что такое бинарное значение текстовой строки? :blink:
 

amel27

Продвинутый
Сообщения
146
Репутация
55
Vlasssov [?]
Не сравнивает...
сравнивает, только операция больше/меньше не определена для бинарных данных,
если нужна длина используйте BinaryLen()

Код:
$s1 = 'Dfcz'
$s2 = 'Мщмф'
$s3 = 'Мщмф'
$b1 = StringToBinary($s1)
$b2 = StringToBinary($s2)
$b3 = StringToBinary($s2)

If $b1<>$b2 Then
    msgbox(0,'','$s1<>$s2')
ElseIf $b1=$b2 Then
    msgbox(0,'','$s1==$s2')
EndIf

If $b2<>$b3 Then
    msgbox(0,'','$s2<>$s3')
ElseIf $b2=$b3 Then
    msgbox(0,'','$s2==$s3')
EndIf
 

SyDr

Сидра
Сообщения
651
Репутация
158
Извиняюсь, но... зачем это может пригодиться? (Кроме случая, когда в строке есть символы 0x00).
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Vlasssov сказал(а):
Объясните мне, как сравнить два бинарных значения текстовых строк?
А как по твоему происходит сравнение обычных строк? По их ASCII кодам. Это тоже самое, что и "бинарные" значения в твоем коде.

Код:
$s1 = 'Dfcz'
$s2 = 'Мщмф'
If $s1 > $s2 Then
	MsgBox(0, '', '$s1')
Else
	MsgBox(0, '', '$s2')
EndIf


Если уж приперло сравнивать их двоичные данные (что безусловно глупо), то можешь так:

Код:
$b2 = Binary(0x4466637A)
$b1 = Binary(0xCCF9ECF4)

If String($b1) > String($b2) Then
	MsgBox(0, '', '$b1')
Else
	MsgBox(0, '', '$b2')
EndIf
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Kaster сказал(а):
а что такое бинарное значение текстовой строки? :blink:
Ну как берем строку и коды символов представляем в двоичном виде. Получившееся число - и есть бинарное значение строки.

_StringToHex($s1) -
а как работает такое преобразование? То есть там при двух различных строках не может быть одинакового значения?
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Vlasssov [?]
StringToHex($s1) -
а как работает такое преобразование? То есть там при двух различных строках не может быть одинакового значения?
Код:
_StringToHex($s1)
это есть :
Код:
Hex(StringToBinary($s1))
Не может
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Vlasssov [?]
Ну как берем строку и коды символов представляем в двоичном виде. Получившееся число - и есть бинарное значение строки
строка длинная, ты получишь длинное число, как ты хочешь их сравнивать? максимальное число в AutoIt - 0х7FFFFFFFFFFFFFFF
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
:laugh:Ну вообщем разобрался я... Глупость сказал... Сравниваются символьные переменные...
Длина строки - ограничена...

Но на всякий случай. При сравнении строк - что там сравнивается? По моему в Visual Basic такого не было...
 

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
Vlasssov [?]
При сравнении строк - что там сравнивается?
Механизмов сравнения несколько.
Но как правило встроенные функции в ЯП, используют их комплексно...
Опишу самый обыденный, при условии что строки приведены к одной кодировке символов (даже если нет, то как правило функция делает это сама), для каждой кодировки свои алгоритмы но в общем как-то так:
1) Банально сравнивается размеры (в байтах) которые занимают строки в памяти.
2) сравнивается общее количество символов (просматривая байты в ячейке памяти, определяя где начинается и заканчивается символ, если символы 1-байтовые (ASCII) то этот пункт опускается.
3) сравниваются коды (по таблицам) первого и последнего символов строки, если совпадают то ...
3) Возвращаются коды символов начиная со второго и по возрастанию до и сравниваются и сравниваются с соответствующим кодами символов из другой строки до первого несовпадения.

:smile: вот
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
А где поподробней почитать можно? Сама мысль о бинарных значениях строки, была мной где-то почерпнута, где не помню... Но вот представлении строки в виде двоичного числа дает уникальность ключа, а вот все остальные способы - не уверен...
 

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
Vlasssov, лучше бы все таки на примере какого-нь-ть конкретного языка...
общая теория на этот счет как бы только поверхносто
здесь
.... здесь впринципе об алгоритмах сравнения и анализа строк
.... ну и собственно по каждому конкретному ЯП есть свои примудрости н\п одни сравнивают по значению, другие по ссылке на ячейку памяти, в некоторых случаях это необходимо даже предусматреть изначально и т.п.
 
Верх