Вопросы (Yerkin Sagandykov) - страница 2

 
Yerkin Sagandykov #:

в чем ошибка ?


Вы сравнивали encodedValue с (ulong) readValue?
Значения совпадают?

 
Yerkin Sagandykov #:

в чем ошибка ?

ulong <-> double надо делать побайтово, а не штатным приведением типов друг к другу. Используйте union.

 
Yerkin Sagandykov #:

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

/// упаковка 12-ти символов ascii в 1 double
bool Pack12(string s,double &res)
{
   uchar bytes[12]; 
   ArrayInitialize(bytes,0);
   if (StringToCharArray(s,bytes,0,12,CP_ACP)<0) {
      return false;
   }
   union tmp {
      uchar bin[8];
      double dbl;
   } data;
   data.bin[0]=(bytes[0]>>3)&0x1F;
   data.bin[1]=(bytes[1]>>3)&0x1F;
   data.bin[2]=(bytes[2]>>3)&0x1F;
   data.bin[3]=(bytes[3]>>3)&0x1F;
   data.bin[4]=(bytes[4]>>3)&0x1F;
   data.bin[5]=(bytes[5]>>3)&0x1F;
   data.bin[6]=(bytes[6]>>3)&0x1F;
   data.bin[7]=(bytes[7]>>3)&0x1F;
				    // 5 значащих байт делим на 3 части: 3 в одну сторону, 2 в другую	
   data.bin[0]|=(bytes[8]&0xF8)<<2; // биты: 0b0011_1000 
   data.bin[1]|=(bytes[8]&0xc0);    // биты: 0b1100_0000

   data.bin[2]|=(bytes[9]&0xF8)<<2;
   data.bin[3]|=(bytes[9]&0xc0);

   data.bin[4]|=(bytes[10]&0xF8)<<2;
   data.bin[5]|=(bytes[10]&0xc0);

   data.bin[6]|=(bytes[11]&0xF8)<<2;
   data.bin[7]|=(bytes[11]&0xc0);

   res=data.dbl;
   return true;
}

вроде бы так вот :-) просто в идентификаторах ACSII (печатные символы без пунктуаций и спец.символов) , 3 младшие бита ненужны, достаточно старших 5-ти. Итого для хранения нужно: 5*12=60 бит. А у нас 64 :-) при желании можно ещё и битовых флагов натыкать

не проверял, это "с руки".

в обратку - сами :-)

 
Maxim Kuznetsov #:

вроде бы так вот :-) просто в идентификаторах ACSII (печатные символы без пунктуаций и спец.символов) , 3 младшие бита ненужны, достаточно старших 5-ти. Итого для хранения нужно: 5*12=60 бит. А у нас 64 :-) при желании можно ещё и битовых флагов натыкать

не проверял, это "с руки".

в обратку - сами :-)

А https://www.mql5.com/ru/docs/common/cryptencode с BASE64 это не оно?

 
JRandomTrader #:

А https://www.mql5.com/ru/docs/common/cryptencode с BASE64 это не оно?

нет, конечно-же не ОНО :-)

Base64 - преобразовать бинарное в "printable" то есть в текст

QmFzZTY0IC0g0L/RgNC10L7QsdGA0LDQt9C+0LLQsNGC0Ywg0LHQuNC90LDRgNC90L7QtSDQsiAicHJpbnRhYmxlIiDRgtC+INC10YHRgtGMINCyINGC0LXQutGB0YI=

 
Вы скоро дойдёте до использования QR-кода…)))
 
Maxim Kuznetsov #:

нет, конечно-же не ОНО :-)

Base64 - преобразовать бинарное в "printable" то есть в текст

Ограничение в 64 байта. 512 бит. Ваши символы сверху больше занимают объем.

 
Volodymyr Zubov #:

Ограничение в 64 байта. 512 бит. Ваши символы сверху больше занимают объем.

вы о чём ??

 
Maxim Kuznetsov #:

нет, конечно-же не ОНО :-)

Base64 - преобразовать бинарное в "printable" то есть в текст

А наоборот?

 
JRandomTrader #:

А наоборот?

произвольный текст, поплотнее в bin ??

ZIP 

но для коротких текстов (в несколько символов) выигрыша не будет. 

остаётся только руками, зная словарь текста его упаковывать. Как в данном случае, словарь - латинские буквы и цифры вполне помещаются в 2^5. 5 бит на символ. Остаётся сложить как удобнее в 64 бита :-) 12 символов влезает, 4 бита остаются незадействованы