L.E.
L.E.

Reputation: 645

Little endian to integer

I am getting this string 8802000030000000C602000033000000000000800000008000000000000000001800000000000

and this is what i am expecting to convert from string,

  88020000 long in little endian => 648 
  30000000 long in little endian => 48 
  C6020000 long in little endian => 710
 33000000 long in little endian => 51

left side is the value i am getting from the string and right side is the value i am expecting. The right side values are might be wrong but is there any way i can get right side value from left??

I went through several threads here like

How to convert an int to a little endian byte array?

C# Big-endian ulong from 4 bytes

I tried quite different functions but nothing giving me value which are around or near by what i am expecting.

Update : I am reading text file as below. Most of the data are current in text format, but all of the sudden i am getting bunch of GRAPHICS info, i am not sure how to handle it.

    RECORD=28 

cVisible=1
dwUser=0
nUID=23
c_status=1
c_data_validated=255
c_harmonic=0
c_dlg_verified=0
c_lock_sizing=0
l_last_dlg_updated=0
s_comment=
s_hlinks=
dwColor=33554432
memUsr0=
memUsr1=
memUsr2=
memUsr3=
swg_bUser=0
swg_dConnKVA=L0
swg_dDemdKVA=L0
swg_dCodeKVA=L0
swg_dDsgnKVA=L0
swg_dConnFLA=L0
swg_dDemdFLA=L0
swg_dCodeFLA=L0
swg_dDsgnFLA=L0
swg_dDiversity=L4607182418800017408
cStandard=0
guidDB={901CB951-AC37-49AD-8ED6-3753E3B86757}
l_user_selc_rating=0
r_user_selc_SCkA=
a_conn1=21
a_conn2=11
a_conn3=7
l_ct_ratio_1=x44960000
l_ct_ratio_2=x40a00000
l_set_ct_ratio_1=
l_set_ct_ratio_2=

c_ct_conn=0

   ENDREC
 GRAPHICS0=8802000030000000C602000033000000000000800000008000000000000000001800000000000
 EOF

Upvotes: 0

Views: 1716

Answers (2)

itsme86
itsme86

Reputation: 19486

Depending on how you want to parse up the input string, you could do something like this:

string input = "8802000030000000C6020000330000000000008000000080000000000000000018000000";

for (int i = 0; i < input.Length ; i += 8)
{
    string subInput = input.Substring(i, 8);
    byte[] bytes = new byte[4];
    for (int j = 0; j < 4; ++j)
    {
        string toParse = subInput.Substring(j * 2, 2);
        bytes[j] = byte.Parse(toParse, NumberStyles.HexNumber);
    }

    uint num = BitConverter.ToUInt32(bytes, 0);
    Console.WriteLine(subInput + " --> " + num);
}

88020000 --> 648
30000000 --> 48
C6020000 --> 710
33000000 --> 51
00000080 --> 2147483648
00000080 --> 2147483648
00000000 --> 0
00000000 --> 0
18000000 --> 24

Upvotes: 2

Gareth McCaughan
Gareth McCaughan

Reputation: 19971

Do you really literally mean that that's a string? What it looks like is this: You have a bunch of 32-bit words, each represented by 8 hex digits. Each one is presented in little-endian order, low byte first. You need to interpret each of those as an integer. So, e.g., 88020000 is 88 02 00 00, which is to say 0x00000288.

If you can clarify exactly what it is you've got -- a string, an array of some kind of numeric type, or what -- then it'll be easier to advise you further.

Upvotes: 2

Related Questions