【发布时间】:2013-08-19 10:21:22
【问题描述】:
我正在使用BitConverter.ToString(bytes) 将字符串转换为十六进制字符串,然后将其进一步转换为整数或浮点数。
但是输入流由 0 组成,表明字节值为 0。所以假设我有一个整数,它由从位置 x 开始的 2 个字节输入表示,第一个字节由 EE 组成,而第二个字节是 @987654324 @。现在,当我使用BitConverter.ToString(bytes, x, 2).Replace ("-","") 时,我得到的输出为EE00,其整数值为60928,但在这种情况下,输出应该是238,它仅将第一个字节EE 转换为整数。
但在某些其他情况下,这 2 个字节可能是 EE01,其整数值将是 60929,在这种情况下是正确的。
有什么建议可以解决我的问题吗?
由于有些人说这个问题令人困惑,我将重申我的问题,我有很长的十六进制字符串作为输入。在十六进制字符串中
1) 前 12 个字节代表字符串。 2)接下来的 11 个字节也代表一些其他的字符串。 3) 接下来的 1 个字节代表整数。 4) 接下来的 3 个字节代表整数。 5) 接下来的 4 个字节代表整数。 6) 接下来的 4 个字节代表浮点数。 7) 接下来的 7 个字节代表字符串。 8) 接下来的 5 个字节代表整数。
所以对于第 4 种情况,如果字节是 ee 00 00,那么我应该忽略 0 并将 ee 转换为整数。但如果它 ee 00 ee 那么我应该将 ee00ee 转换为整数。此外,每次我都会遵循与上述相同的模式。
【问题讨论】:
-
您的帖子有点令人困惑-您是说“00”标志着流的结束吗?如果是这样,你甚至不应该将它传递给转换器......
-
int result = int.Parse(string.Join("", input.Select((item, inx) => new { item, inx }).GroupBy(x => x.inx / 2).Select(g => new string(g.ToArray())).Where(s => s != "00" && s.Length != 2)); -
我想说假设我有很长的十六进制字符串,例如 77 77 87 53 23 24 00 00 00 29 84 84 ee 00 ee。现在假设我需要这个字符串中的一些 int 值,比如前 4 个字节代表一些 int,所以我将取 77 77 87 53 并将其转换为整数或浮点数。现在假设对于其他一些情况,我再次采用 4 个字节 24 00 00 00 所以在这种情况下,我应该忽略 24 之后的 0 并将 24 十六进制转换为整数,但在其他一些输入中,这个值可能是 24 00 00 01 所以在这种情况下我需要考虑十六进制 24000001 并将其转换为整数。
-
@user2673943 你为什么不简单地使用
BitConverter.ToInt32(buf,0);。它会像你描述的那样工作。
标签: c# hex bitconverter