Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с битами (пример на Delphi)

31K
04 апреля 2008 года
lss
19 / / 03.04.2008
Есть код небольшой программы на Delphi переводящая текст из 7-битной кодировки, пишу на BuilderС++.
Непонятно как применить на 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.
31K
04 апреля 2008 года
lss
19 / / 03.04.2008
[SIZE="4"]да еще не понятно:
if HexToBin(PChar(Copy(HexStr, (i - 1) * 2 + 1, 2)),
PChar(@Result), 1) = 0 then
raise Exception.Create('Invalid hex value'); [/SIZE]
8.4K
04 апреля 2008 года
Zor
104 / / 23.04.2006
Скоро будут спрашивать что такое +- и что значит *
31K
04 апреля 2008 года
lss
19 / / 03.04.2008
Всем спасибо...
31K
04 апреля 2008 года
lss
19 / / 03.04.2008
в смысле разобрался :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог