Работа с битами (пример на Delphi)
Непонятно как применить на C++ следующее:
1) VByte:=VByte OR ((Byte(S[LENGTH(S)-i+1])-48) SHL (i-1));
что значит OR и SHL и как это выглядит в С++
2) rez := rez + Digits[Ord(B and (1 shl I) <> 0)];
тут не понятно Ord и от куда здесь AND и <>
3) rez := rez + Digits[B shr 4];
shr?
4) Может что то есть готовое переводящее из 7-битной кодировки, в нашу :) нормальную
[SIZE="4"]Программа на Delphi[/SIZE]
unit FunStr;
[COLOR="Blue"]{-Basic string manipulation routines}[/COLOR]
interface
Uses SysUtils;
[COLOR="Blue"]{-------- Numeric conversion -----------}
[/COLOR]
Function Str2Byte(S:String) :Byte;
[COLOR="Blue"]{-Return byte for string}[/COLOR]
Function Byte2Str(b:Byte) :String;
[COLOR="Blue"]{-Return string for byte}[/COLOR]
function BinaryB(B : Byte) : string;
[COLOR="Blue"]{-Return binary string for byte}[/COLOR]
function BinaryL(L : LongInt; cnt : integer) : string;
[COLOR="Blue"]{-Return binary string for longint}[/COLOR]
function HexB(B : Byte) : string;
[COLOR="Blue"]{-Return hex string for byte}[/COLOR]
Function HexStr2Byte(Str:String) :Byte;
[COLOR="Blue"]{-Return byte for hex string}[/COLOR]
function HexStringToBinString(const HexStr: string): string;
[COLOR="Blue"]{==========================================================================}[/COLOR]
implementation
uses Classes;
type
Long =
record
LowWord, HighWord : Word;
end;
const
Digits : array[0..$F] of Char = '0123456789ABCDEF';
Function Str2Byte(S:String):Byte;
VAR
VByte :Byte;
i :Byte;
Begin
VByte:=0;
For I:=1 To LENGTH(S) DO
VByte:=VByte OR ((Byte(S[LENGTH(S)-i+1])-48) SHL (i-1));
Str2Byte:=VByte;
End;
function BinaryB(B : Byte) : string;
[COLOR="Blue"] {-Return binary string for byte}[/COLOR]
var
I, N : Word;
rez : String;
begin
rez := '';
for I := 7 downto 0 do begin
rez := rez + Digits[Ord(B and (1 shl I) <> 0)];
end;
BinaryB := rez;
end;
function BinaryL(L : LongInt; cnt : integer) : string;
[COLOR="Blue"] {-Return binary string for LongInt}[/COLOR]
var
I : LongInt;
rez : String;
begin
rez := '';
for I := cnt downto 0 do
rez := rez + Digits[Ord(L and LongInt(1 shl I) <> 0)]; {0 or 1}
BinaryL := rez;
end;
function HexB(B : Byte) : string;
[COLOR="Blue"]{-Return hex string for byte}[/COLOR]
var
rez : String;
begin
rez := rez + Digits[B shr 4];
rez := rez + Digits[B and $F];
HexB := rez;
end;
function HEXStr2Byte(Str:String):Byte;
[COLOR="Blue"] {}[/COLOR]
begin
if Str = '' then
HexStr2Byte := 0
else
begin
if Str[1] <> '$' then
Str := '$' + Str;
HexStr2Byte := Str2Byte(Str);
end;
end; [COLOR="Blue"]{HexStr2Byte}[/COLOR]
Function Byte2Str(B:Byte):String;
VAR
s:String;
Begin
STR(B, s);
Byte2Str:=s;
End;
function HexStringToBinString(const HexStr: string): string;
var
i, l: integer;
begin
Result := '';
l := length(HexStr);
l := l div 2;
SetLength(Result, l);
for i := 1 to l do
if HexToBin(PChar(Copy(HexStr, (i - 1) * 2 + 1, 2)),
PChar(@Result), 1) = 0 then
raise Exception.Create('Invalid hex value');
end;
end.
if HexToBin(PChar(Copy(HexStr, (i - 1) * 2 + 1, 2)),
PChar(@Result), 1) = 0 then
raise Exception.Create('Invalid hex value'); [/SIZE]
Скоро будут спрашивать что такое +- и что значит *
Всем спасибо...
в смысле разобрался :)