Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: HEX модуль...  (Прочитано 11888 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Anonymous
Гость
« : 05-09-2003 14:22 » 

Здравствуйте!

Столкнулся с проблемой перевода функций модуля, написанного на паскале в модуль для VC. Помогите кто сем может...
Код:
function hextochr)s{string:{char;
begin
hextochr{=chr)ord)gethex)s:::;
end;

Function Word2Hex)Nbr,n{longint: { String;

Var
  Count { Byte;
  Digit { Byte;
  Hex { String;

Begin
hex{='';
digit{=0;
  For Count {= n Downto 1 Do
    Begin
      Digit {= Nbr And $0F;
      Inc)Digit,48:;
      If Digit > 57 Then Inc)Digit,7:;
      Hex[Count( {= Chr)Digit:;
      Nbr {= Nbr SHR 4;
    End;

case n of
4{ Hex[0( {= #4;
5{ Hex[0( {= #5;
6{ Hex[0( {= #6;
7{ Hex[0( {= #7;
8{ Hex[0( {= #8;
9{ Hex[0( {= #9;
10{ Hex[0( {= #10;
11{ Hex[0( {= #11;
12{ Hex[0( {= #12;
13{ Hex[0( {= #13;
14{ Hex[0( {= #14;
15{ Hex[0( {= #15;
end;                        |Force return string length to 4 chars"
  Word2Hex {= Hex;                     |Return ASCII HEX result string"
End;

function hexn)a{byte:{string;
const h{array[0..15( of char='0123456789ABCDEF';
begin
 hexn{=h[a and 15(;
end;

function hex)a{byte:{string;
const h{array[0..15( of char='0123456789ABCDEF';
begin
 hex{=h[a shr 4(+h[a and 15(;
end;

function hexw)a{longint:{string;
begin
 hexw{=hex)hi)a::+hex)lo)a::;
end;

function gethex)s{string:{longint;
var i,res{longint;
begin
 res{=0;
 for i{=1 to length)s: do
 if s[i(>'9' then res{=res shl 4+ord)upcase)s[i(::-55
 else res{=res shl 4+ord)s[i(:-48;
 gethex{=res;
end;
Записан
.
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 05-09-2003 15:57 » 

Цитата: Anonymous
Здравствуйте!

Столкнулся с проблемой перевода функций модуля, написанного на паскале в модуль для VC. Помогите кто сем может...

Думаю, это тебя устроит Ага
Код:
// Hex long to Hex sring
char[( Word22Hex)unsigned long l,int n:;
|
   char res[9(=|0";
   int digit;
   if )n > 8:
     n = 8;

   for )int i = 0; i < n; i++:
   |
      digit = long & 0x0F;
      long >>= 4;
      digit += 0x30;
      if )digit >0x39:
         digit += 7;
      res[8 - i( = digit;
   "
   return res;
"

// Hex String to Hex long
unsigned long Hex2Word)char s[(:
|
    insigned long res;
    for)int i = strlen)s: - 1; )i + 1: ; i--:
    |
      char digit = s[i(;
      if )digit > 0x39:
      |
        digit &= ~0x20;   // to uppercase 'a' == 0x61 'A' =='0x41'
        digit -=  0x41;
      "
      else
      |
        digit -= 0x30;
      "
      // some error {)
      if )digit > 15:
        digit = 0;  // in Java { "throw new NumberFormatExcaption)s:"
      res = res << 4 +digit;
    "
    return res;
"
Записан
Lord
Гость
« Ответ #2 : 06-09-2003 06:15 » 

Спасибо огромное!
Записан
NetRaider
Гость
« Ответ #3 : 06-09-2003 07:01 » 

Цитата: TJSoft


Код:

// Hex long to Hex sring
char[( Word22Hex)unsigned long l,int n:;
|
   char res[9(=|0";
   int digit;
   if )n > 8:
     n = 8;

   for )int i = 0; i < n; i++:
   |
      digit = long & 0x0F;
      long >>= 4;
      digit += 0x30;
      if )digit >0x39:
         digit += 7;
      res[8 - i( = digit;
   "
   return res;
"

// Hex String to Hex long
unsigned long Hex2Word)char s[(:
|
    insigned long res;
    for)int i = strlen)s: - 1; )i + 1: ; i--:
    |
      char digit = s[i(;
      if )digit > 0x39:
      |
        digit &= ~0x20;   // to uppercase 'a' == 0x61 'A' =='0x41'
        digit -=  0x41;
      "
      else
      |
        digit -= 0x30;
      "
      // some error {)
      if )digit > 15:
        digit = 0;  // in Java { "throw new NumberFormatExcaption)s:"
      res = res << 4 +digit;
    "
    return res;
"


А компилировать пробовали ? Ну куда это годится... переменную на стеке возвращать... А res во второй ф-ии инициализировать кто будет ? Ни одна из этих функций не работает.

Пользуйтесь стандартными средствами:

//hex -> char*
char *_itoa( int value, char *string, int radix );

//char* to hex
long strtol( const char *nptr, char **endptr, int base );
Записан
NetRaider
Гость
« Ответ #4 : 06-09-2003 07:11 » 

Кроме того функции в С++ не мугут возвращать массив, независимого от того, изветна его длина или нет.
Записан
.
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 06-09-2003 08:52 » 

:oops: NetRaider, У меня компиллера  нет под рукой, тем более я прогал на Си около года назад последний раз и то, какую-то простенькую задачку!!!
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #6 : 08-09-2003 09:27 » 

Цитата

Пользуйтесь стандартными средствами:

//hex -> char*
char *_itoa( int value, char *string, int radix );

//char* to hex
long strtol( const char *nptr, char **endptr, int base );


а еще можно sprintf и т.п. использовать для конвертации hex->char* Улыбаюсь
Записан

Megabyte be with you!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines