小端到整数

时间:2012-07-10 22:09:20

标签: c# int endianness

我收到这个字符串 8802000030000000C602000033000000000000800000008000000000000000001800000000000

这就是我期望从字符串

转换的内容
  88020000 long in little endian => 648 
  30000000 long in little endian => 48 
  C6020000 long in little endian => 710
 33000000 long in little endian => 51

左侧是我从字符串获得的值,右侧是我期望的值。右边的值可能是错误的,但有什么方法可以从左边得到右边的值?

我在这里经历了几个主题,如

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

C# Big-endian ulong from 4 bytes

我尝试了不同的功能,但没有给我任何价值,这些价值在我期待的附近或附近。

更新: 我正在阅读如下文本文件。大多数数据都是当前的文本格式,但突然间我得到了大量的GRAPHICS信息,我不知道如何处理它。

    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

2 个答案:

答案 0 :(得分:2)

你真的意味着那是一个字符串吗?看起来是这样的:你有一堆32位的单词,每个单词由8个十六进制数字表示。每个都以little-endian顺序呈现,首先是低字节。您需要将每个解释为整数。因此,例如,88020000是88 02 00 00,也就是说0x00000288。

如果你能确切地说明你有什么 - 一个字符串,某种数字类型的数组,或者什么 - 那么你会更容易建议你。

答案 1 :(得分:2)

根据您要解析输入字符串的方式,您可以执行以下操作:

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