如何检测二进制文件中的非零值?

时间:2011-07-27 16:35:34

标签: c# xml binary bytearray

我有一个折磨了好几个小时的问题。我需要能够在数组中找到第一个非零值(考虑到之后可能有零)。

所以如果:

A [0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 24, 0, 0, 18, 9, 9, 7, 8, 0];

如何设置变量say,int origin;等于9,这样A [origin] = 16?

我的实际问题比这更复杂,但这本质上是让我陷入困境的简化版本。我实际上正在使用输出512字节扇区的蓝牙设备,但该扇区中的每个字节代表不同的东西。所以我做了一个for循环来提取我感兴趣的字节编号224,然后我为每个扇区创建了一个值为224的数组。尽管扇区中的所有其他字节都包含数据,但该特定字节直到很久之后才开始发送。因为我想分析我需要知道哪个部门开始有用的数据。因此,我有上述问题。所有这些信息与问题完全无关,但我已将其作为背景提供。

此外,如果你真的想要给自己一个答案,我需要输出字节数224作为“纬度”,字节数225输出为“longuitude”,字节226输出为“elevation”(对于GPS)一种xml格式。关于如何将我的三字节数组输出为xml格式的任何想法?我已经读过它们必须先是字符串形式,但这很容易:

string [] Lat = new string [Sectors];
for (int i = 0, i < sectors; i++)
{
   Lat[i] = A[i].ToString();
}

最后,我喜欢这样的结果。

<document>
    <point lat = "50.0" lon = "-60.5" ele = "605">
        <time> 16:54:08 </time>
    </point>
    <point .... etc
</document>

我希望我能给你足够的信息,我会帮助你提供任何帮助。大家欢呼!顺便说一句,所有代码都应该在c#中,我使用visual c#2010 express。

1 个答案:

答案 0 :(得分:4)

你在问题​​中陈述了“数组”,这使得它更容易:

int index = -1;    
for(int i = 0 ; i < arr.Length ; i++)
{
    if(arr[i] != 0)
    {
        index = i;
        break;
    }
}

现在如果index是非负的,那么它是第一个非零的索引。然后是arr [index]。

如果你需要从FileStream读取只是循环读取并重复。如果需要,可以使用不安全的代码进行黑客攻击,以便稍微加快。