ืกื˜ื’ื ื•ื’ืจืคื™ื” ืฉืœ LSB

ืคืขื ื›ืชื‘ืชื™ ืืช ืฉืœื™ ืคื•ืกื˜ ืจืืฉื•ืŸ ื‘ืจื›ื–ืช. ื•ื”ืคื•ืกื˜ ื”ื–ื” ื”ื•ืงื“ืฉ ืœื‘ืขื™ื” ืžืขื ื™ื™ื ืช ืžืื•ื“, ื›ืœื•ืžืจ ืกื˜ื’ื ื•ื’ืจืคื™ื”. ื›ืžื•ื‘ืŸ, ื”ืคืชืจื•ืŸ ื”ืžื•ืฆืข ื‘ืื•ืชื• ื ื•ืฉื ื™ืฉืŸ ืื™ื ื• ื™ื›ื•ืœ ืœื”ื™ืงืจื ืกื˜ื’ื ื•ื’ืจืคื™ื” ื‘ืžื•ื‘ืŸ ื”ืืžื™ืชื™ ืฉืœ ื”ืžื™ืœื”. ื–ื” ืจืง ืžืฉื—ืง ืขื ืคื•ืจืžื˜ื™ื ืฉืœ ืงื‘ืฆื™ื, ืื‘ืœ ื‘ื›ืœ ื–ืืช ืžืฉื—ืง ื“ื™ ืžืขื ื™ื™ืŸ.

ื”ื™ื•ื ื ื ืกื” ืœื—ืคื•ืจ ืงืฆืช ื™ื•ืชืจ ืœืขื•ืžืง ื•ืœื”ืกืชื›ืœ ืขืœ ืืœื’ื•ืจื™ืชื LSB. ืื ืืชื” ืžืขื•ื ื™ื™ืŸ, ืืชื” ืžื•ื–ืžืŸ ืชื—ืช ื—ืชื•ืœ. (ืžืชื—ืช ืœืงื™ืฆื•ืฅ ื™ืฉ ืชืขื‘ื•ืจื”: ื‘ืขืจืš ืžื’ื” ื‘ื™ื™ื˜.)

ืงื•ื“ื ื›ืœ, ื™ืฉ ืฆื•ืจืš ืœืขืฉื•ืช ื”ืงื“ืžื” ืงืฆืจื”. ื›ื•ืœื ื™ื•ื“ืขื™ื ืฉืžื˜ืจืช ื”ื”ืฆืคื ื” ื”ื™ื ืœืืคืฉืจ ืœืงืจื•ื ืžื™ื“ืข ืกื•ื“ื™. ื›ืžื•ื‘ืŸ ืฉืœืงืจื™ืคื˜ื•ื’ืจืคื™ื” ื™ืฉ ืืช ื”ื™ื™ืฉื•ืžื™ื ืฉืœื”, ืื‘ืœ ื™ืฉ ื’ื™ืฉื” ืื—ืจืช ืœื”ื’ื ื” ืขืœ ื ืชื•ื ื™ื. ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืœื”ืฆืคื™ืŸ ืืช ื”ืžื™ื“ืข, ืืœื ืœื”ืขืžื™ื“ ืคื ื™ื ืฉืื™ืŸ ืœื ื• ืื•ืชื•. ื–ื• ื‘ื“ื™ื•ืง ื”ืกื™ื‘ื” ืฉื”ืกื˜ื’ื ื•ื’ืจืคื™ื” ื”ื•ืžืฆืื”. ื•ื™ืงื™ืคื“ื™ื” ืžื‘ื˜ื™ื—ื” ืœื ื• ืฉ"ืกื˜ื’ื ื•ื’ืจืคื™ื” (ืžื”ื™ื•ื•ื ื™ืช ฯƒฯ„ฮตฮณฮฑฮฝฮฟฯƒ - ืžื•ืกืชืจ ื•ืžื”ื™ื•ื•ื ื™ืช ฮณฯฮฑฯ†ฯ‰ - ืื ื™ ื›ื•ืชื‘, ืคืฉื•ื˜ื• ื›ืžืฉืžืขื• "ื›ืชื™ื‘ื” ืกื•ื“ื™ืช") ื”ื™ื ื”ืžื“ืข ืฉืœ ื”ืขื‘ืจืช ืžื™ื“ืข ื ืกืชืจืช ืขืœ ื™ื“ื™ ืฉืžื™ืจืช ืขืฆื ื”ื”ืขื‘ืจื” ื‘ืกื•ื“.

ื›ืžื•ื‘ืŸ, ืืฃ ืื—ื“ ืœื ืื•ืกืจ ืขืœ ืฉื™ืœื•ื‘ ืฉื™ื˜ื•ืช ืงืจื™ืคื˜ื•ื’ืจืคื™ื•ืช ื•ืกื˜ื’ื ื•ื’ืจืคื™ื•ืช. ื™ืชืจื” ืžื›ืš, ื‘ืคื•ืขืœ ื”ื ืขื•ืฉื™ื ื–ืืช, ืื‘ืœ ื”ืžืฉื™ืžื” ืฉืœื ื• ื”ื™ื ืœื”ื‘ื™ืŸ ืืช ื”ื™ืกื•ื“ื•ืช. ืื ืชืœืžื“ ื”ื™ื˜ื‘ ืืช ื”ืžืืžืจ ื‘ื•ื•ื™ืงื™ืคื“ื™ื”, ืชื’ืœื” ืฉืืœื’ื•ืจื™ืชืžื™ื ืกื˜ื’ื ื•ื’ืจืคื™ื™ื ื›ื•ืœืœื™ื ืืช ืžื” ืฉื ืงืจื. ืžื™ื›ืœ ื•ืžืกืจ. ืงื•ื ื˜ื™ื™ื ืจ ื”ื•ื ื›ืœ ืžื™ื“ืข ืฉืขื•ื–ืจ ืœื”ืกืชื™ืจ ืืช ื”ื”ื•ื“ืขื” ื”ืกื•ื“ื™ืช ืฉืœื ื•.

ื‘ืžืงืจื” ืฉืœื ื•, ื”ืงื•ื ื˜ื™ื™ื ืจ ื™ื”ื™ื” ืชืžื•ื ื” ื‘ืคื•ืจืžื˜ BMP. ืจืืฉื™ืช, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืžื‘ื ื” ืฉืœ ื”ืงื•ื‘ืฅ ื”ื–ื”. ื ื™ืชืŸ ืœื—ืœืง ืืช ื”ืงื•ื‘ืฅ ืœ-4 ื—ืœืงื™ื: ื›ื•ืชืจืช ืงื•ื‘ืฅ, ื›ื•ืชืจืช ืชืžื•ื ื”, ืคืœื˜ื” ื•ื”ืชืžื•ื ื” ืขืฆืžื”. ืœืžื˜ืจื•ืชื™ื ื•, ืขืœื™ื ื• ืœื“ืขืช ืจืง ืžื” ื›ืชื•ื‘ ื‘ื›ื•ืชืจืช.

ืฉื ื™ ื”ื‘ืชื™ื ื”ืจืืฉื•ื ื™ื ืฉืœ ื”ื›ื•ืชืจืช ื”ื ื—ืชื™ืžืช BM, ืœืื—ืจ ืžื›ืŸ ื’ื•ื“ืœ ื”ืงื•ื‘ืฅ ื‘ื‘ืชื™ื ื ื›ืชื‘ ื‘ืžื™ืœื” ื›ืคื•ืœื”, 4 ื”ื‘ืชื™ื ื”ื‘ืื™ื ืฉืžื•ืจื™ื ื•ื—ื™ื™ื‘ื™ื ืœื”ื›ื™ืœ ืืคืกื™ื, ื•ืœื‘ืกื•ืฃ, ืžื™ืœื” ื›ืคื•ืœื” ื ื•ืกืคืช ืžื›ื™ืœื” ืืช ื”ื”ื™ืกื˜ ืžืชื—ื™ืœืช ื”- ื”ืงื•ื‘ืฅ ืœื‘ื™ื™ื˜ื™ื ื‘ืคื•ืขืœ ืฉืœ ื”ืชืžื•ื ื”. ื‘ืงื•ื‘ืฅ bmp ืฉืœ 24 ืกื™ื‘ื™ื•ืช, ื›ืœ ืคื™ืงืกืœ ืžืงื•ื“ื“ ื‘ืฉืœื•ืฉื” ื‘ืชื™ื ืฉืœ BGR.

ืขื›ืฉื™ื• ืื ื—ื ื• ื™ื•ื“ืขื™ื ืื™ืš ืœื”ื’ื™ืข ืœืชืžื•ื ื”, ื›ืœ ืฉื ื•ืชืจ ื”ื•ื ืœื”ื‘ื™ืŸ ืื™ืš ืืคืฉืจ ืœื›ืชื•ื‘ ืฉื ืืช ื”ืžื™ื“ืข ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื. ื‘ืฉื‘ื™ืœ ื–ื” ื ื–ื“ืงืง ืœืฉื™ื˜ืช LSB. ืžื”ื•ืช ื”ืฉื™ื˜ื” ื”ื™ื ื›ื“ืœืงืžืŸ: ืื ื• ืžื—ืœื™ืคื™ื ืืช ื”ื‘ื™ื˜ื™ื ื”ืคื—ื•ืช ืžืฉืžืขื•ืชื™ื™ื ื‘ื‘ื™ื™ื˜ื™ื ื”ืื—ืจืื™ื ืขืœ ืงื™ื“ื•ื“ ื”ืฆื‘ืข. ื ื ื™ื— ืฉืื ื”ื‘ื™ืช ื”ื‘ื ืฉืœ ื”ื”ื•ื“ืขื” ื”ืกื•ื“ื™ืช ืฉืœื ื• ื”ื•ื 11001011, ื•ื”ื‘ืชื™ื ื‘ืชืžื•ื ื” ื”ื...11101100 01001110 01111100 0101100111... ืื– ื”ืงื™ื“ื•ื“ ื™ื™ืจืื” ื›ืš. ื ืคืฆืœ ืืช ื‘ื™ื™ื˜ ื”ื”ื•ื“ืขื” ื”ืกื•ื“ื™ืช ืœ-4 ื—ืœืงื™ื ืฉืœ ืฉื ื™ ืกื™ื‘ื™ื•ืช: 11, 00, 10, 11, ื•ื ื—ืœื™ืฃ ืืช ื”ื‘ื™ื˜ื™ื ืžืกื“ืจ ื ืžื•ืš ืฉืœ ื”ืชืžื•ื ื” ื‘ืคืจื’ืžื ื˜ื™ื ื”ืžืชืงื‘ืœื™ื: ...11101111 01001100 01111110 0101100111โ€ฆ. ืชื—ืœื™ืฃ ื›ื–ื” ื‘ื“ืจืš ื›ืœืœ ืื™ื ื• ืžื•ืจื’ืฉ ืœืขื™ืŸ ื”ืื ื•ืฉื™ืช. ื™ืชืจ ืขืœ ื›ืŸ, ื”ืชืงื ื™ ืคืœื˜ ื™ืฉื ื™ื ืจื‘ื™ื ืืคื™ืœื• ืœื ื™ื•ื›ืœื• ืœื”ืฆื™ื’ ืฉื™ื ื•ื™ื™ื ืžื™ื ื•ืจื™ื™ื ื›ืืœื”.

ื‘ืจื•ืจ ืฉืืชื” ื™ื›ื•ืœ ืœืฉื ื•ืช ืœื ืจืง ืืช 2 ื”ื‘ื™ื˜ื™ื ื”ืคื—ื•ืช ืžืฉืžืขื•ืชื™ื™ื, ืืœื ื›ืœ ืžืกืคืจ ืžื”ื. ื™ืฉ ืืช ื”ืชื‘ื ื™ืช ื”ื‘ืื”: ื›ื›ืœ ืฉื ืฉื ื” ื™ื•ืชืจ ื‘ื™ื˜ื™ื, ื›ืš ื ื•ื›ืœ ืœื”ืกืชื™ืจ ื™ื•ืชืจ ืžื™ื“ืข, ื•ื›ืš ื–ื” ื™ื’ืจื•ื ืœื™ื•ืชืจ ื”ืคืจืขื•ืช ื‘ืชืžื•ื ื” ื”ืžืงื•ืจื™ืช. ืœื“ื•ื’ืžื”, ื”ื ื” ืฉืชื™ ืชืžื•ื ื•ืช:

ืกื˜ื’ื ื•ื’ืจืคื™ื” ืฉืœ LSB
ืกื˜ื’ื ื•ื’ืจืคื™ื” ืฉืœ LSB

ืœืžืจื•ืช ืžืืžืฆื™, ืœื ื”ืฆืœื—ืชื™ ืœืจืื•ืช ืืช ื”ื”ื‘ื“ืœ ื‘ื™ื ื™ื”ื, ืื‘ืœ ื‘ื›ืœ ื–ืืช, ื‘ืชืžื•ื ื” ื”ืฉื ื™ื™ื”, ื‘ืฉื™ื˜ื” ื”ืžืชื•ืืจืช, ืžืกืชืชืจ ืฉื™ืจื• โ€‹โ€‹ืฉืœ ืœื•ืื™ืก ืงืจื•ืœ "ื”ืฆื™ื“ ืฉืœ ื”ืกื ืจืง". ืื ืงืจืืชื ืขื“ ื›ืืŸ, ื›ื ืจืื” ืฉืืชื ืžืขื•ื ื™ื™ื ื™ื ืœืœืžื•ื“ ืขืœ ื”ื™ื™ืฉื•ื. ื–ื” ื“ื™ ืคืฉื•ื˜, ืื‘ืœ ืื ื™ ืื–ื”ื™ืจ ืื•ืชืš ืžื™ื“ ืฉื”ื›ืœ ื ืขืฉื” ื‘ื“ืœืคื™. ื™ืฉ ืœื›ืš ืฉืชื™ ืกื™ื‘ื•ืช: 1. ืื ื™ ื—ื•ืฉื‘ ืฉื“ืœืคื™ ื”ื™ื ืฉืคื” ื˜ื•ื‘ื”; 2. ื”ืชื•ื›ื ื™ืช ื”ื–ื• ื ื•ืœื“ื” ื‘ืชื”ืœื™ืš ืฉืœ ื”ื›ื ืช ืงื•ืจืก ืขืœ ื™ืกื•ื“ื•ืช ื”ืจืื™ื™ื” ื”ืžืžื•ื—ืฉื‘ืช, ื•ื”ื—ื‘ืจ'ื” ืœื”ื ืื ื™ ืžืœืžื“ ืืช ื”ืงื•ืจืก ื”ื–ื” ืขื“ื™ื™ืŸ ืœื ื™ื•ื“ืขื™ื ื›ืœื•ื ืžืœื‘ื“ ื“ืœืคื™. ืœืžื™ ืฉืœื ืžื›ื™ืจ ืืช ื”ืชื—ื‘ื™ืจ, ืฆืจื™ืš ืœื”ืกื‘ื™ืจ ื“ื‘ืจ ืื—ื“: shl x ื”ื•ื ืชื–ื•ื–ื” ืกื™ื‘ื™ืช ืฉืžืืœื” ืขืœ ื™ื“ื™ x, shr x ื”ื™ื ื”ื–ื–ื” ืกื™ื‘ื™ืช ื™ืžื™ื ื” ืขืœ ื™ื“ื™ x.

ืื ื• ืžื ื™ื—ื™ื ืฉืื ื• ื›ื•ืชื‘ื™ื ื˜ืงืกื˜ ื”ืžืื•ื—ืกืŸ ื‘ืžื—ืจื•ื–ืช ืœืชื•ืš ื”ืžื™ื›ืœ ื•ืžื—ืœื™ืคื™ื ืืช ืฉื ื™ ื”ื‘ืชื™ื ื”ืชื—ืชื•ื ื™ื:
ืงื•ื“ ื”ืงืœื˜ื”:

ืขื‘ื•ืจ i:=1 ืœ- length(str) do
    ืœื”ืชื—ื™ืœ
      l1:=byte(str[i]) shr 6;
      l2:=byte(str[i]) shl 2; l2:=l2 shr 6;
      l3:=byte(str[i]) shl 4; l3:=l3 shr 6;
      l4:=byte(str[i]) shl 6; l4:=l4 shr 6;
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l1;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l2;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l3;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l4;
      f.WriteBuffer(tmp,1);
 
    ื”ืกื•ืฃ;

ืงื•ื“ ืœืงืจื™ืื”:

ืขื‘ื•ืจ i:=1 ืœ-MsgSize do
    ืœื”ืชื—ื™ืœ
      f.ReadBuffer(tmp,1);
      l1:=tmp shl 6;
      f.ReadBuffer(tmp,1);
      l2:=tmp shl 6; l2:=l2 shr 2;
      f.ReadBuffer(tmp,1);
      l3:=tmp shl 6; l3:=l3 shr 4;
      f.ReadBuffer(tmp,1);
      l4:=tmp shl 6; l4:=l4 shr 6;
      str:=str+char(l1+l2+l3+l4);
    ื”ืกื•ืฃ;

ื•ื‘ื›ืŸ, ืœืขืฆืœื ื™ื ื‘ืืžืช - ืงื™ืฉื•ืจ ืœืชื•ื›ื ื™ืช ื•ืœืงื•ื“ ื”ืžืงื•ืจ ืฉืœื”.

ืชื•ื“ื”.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”