From: "laehyung" <laehyung.jeong@samsung.com>
Subject: Advice Please
Date: 9 Nov 2006 22:52:15 -0800
Date: 2006-11-09T22:52:15-08:00 [thread overview]
Message-ID: <1163141535.700889.83160@k70g2000cwa.googlegroups.com> (raw)
Advice & comments please.
my test code is ...
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Characters.Handling;
use Ada.Characters.Handling;
with Ada.Unchecked_Conversion;
with Interfaces; use Interfaces;
with Interfaces.C;
procedure Test_Str is
---------------------------------------
function Conv_U8_To_Char is
new Ada.Unchecked_Conversion(Source => Unsigned_8,
Target => Character);
function Conv_Char_To_U8 is
new Ada.Unchecked_Conversion(Source => Character,
Target => Unsigned_8);
---------------------------------------
function Strhex_To_Ascii_Strbyte (Item : in String) return String is
Strsize : Natural := Item'Length;
Rtn_Length : Natural := (Strsize)/2;
Str_Val : String(1..Rtn_Length);
Strtemp1 : Unsigned_8;
Strtemp2 : Unsigned_8;
C : array(1..Strsize) of Unsigned_8;
begin
for Idx in Item'range loop
if Is_Hexadecimal_Digit(Item(Idx)) then
if Is_Digit(Item(Idx)) then
C(Idx):=
Unsigned_8(Character'Pos(Item(Idx))-Character'Pos('0'));
else
C(Idx):= Unsigned_8(Character'Pos(To_Upper(Item(Idx)))
-Character'Pos('A')+16#A#);
end if;
else
Put_Line("Program Code contains NON-HexaDecimal character.
program Break");
raise Data_Error;
end if;
end loop;
for I in 1..Rtn_Length loop
Strtemp1 := Shift_Left(Unsigned_8(C(2*I-1)),4) and
Unsigned_8(16#FF#);
Strtemp2 := Unsigned_8(C(2*I)) and Unsigned_8(16#FF#);
Str_Val(I) := Conv_U8_To_Char( Strtemp1 or Strtemp2 );
end loop;
return Str_Val;
end Strhex_To_Ascii_Strbyte;
---------------------------------------
Input_Str : String := "0000002D0F010000002E0F000000000A10A3";
begin
--Put("Output_Str =>");
Put(Strhex_To_Ascii_Strbyte(Input_Str));
end Test_Str;
----------------------------------------------------------------
(my machine is windows XP)
Compile & Run:
c:\work>gnatmke -O2 -gnatvf test_str
gcc -c -O2 -gnatvf test_str.adb
GNAT GPL 2006 (20060522-34)
Copyright 1992-2006, Free Software Foundation, Inc.
Compiling: test_str.adb (source file time stamp: 2006-11-10 05:22:28)
68 lines: No errors
gnatbind -x test_str.ali
gnatlink test_str.ali
c:\work> test_str > code_test.txt
edit code_test.txt file with hexa code editor(ex. UltraEdit-32)
output data shold be
00000000h:00 00 00 2D 0F 01 00 00 00 2E 0F 00 00 00 00 00
;...-............
00000010h:0A 10 A3 0D 0A ;..?.
but result is
00000000h:00 00 00 2D 0F 01 00 00 00 2E 0F 00 00 00 00 0D
;...-............
00000010h:0A 10 A3 0D 0A ;..?.
the data of address 0Fh is 0D, why?
How to correct this problem.
next reply other threads:[~2006-11-10 6:52 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-10 6:52 laehyung [this message]
2006-11-10 9:27 ` Advice Please Dmitry A. Kazakov
2006-11-10 20:32 ` Jeffrey R. Carter
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox