2011-07-27 57 views
2

我有一个折磨了好几个小时的问题。我需要能够找到数组中的第一个非零值(考虑到之后可能有零)。如何检测二进制文件中的非零值?

所以,如果:

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

如何设置一个变量说,INT起源;等于9,使得A [原点] = 16?

我的实际问题比这个更复杂,但这实质上是我坚持的简化版本。实际上,我使用的蓝牙设备可以输出512字节的扇区,但是该扇区中的每个字节都表示不同的内容。所以我做了一个for循环来提取我感兴趣的字节数224,然后我为每个扇区创建了一个数值224。尽管扇区中的所有其他字节都包含数据,但该特定字节直到很晚才开始传输。由于我想分析数据,我需要知道哪些部门开始有用。因此,我有上面的问题。所有这些信息与问题完全无关,但我已经提供了它的背景。我需要输出字节数224作为“纬度”,字节数225输出为“longuitude”,字节226输出为“海拔”(对于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。

+0

我很困惑 - 只是把它看作是二进制的,要么全部(如果很小),要么通过Stream.Read(如果较大),并检查零...也许使用一个不安全的字节*/int *黑客如果你需要优化。究竟是什么问题? –

+0

马克有你的解决方案,但是对于你的经度和纬度问题,一个字节是不够的信息保存这些值。我认为你正在解释错误的数据格式。 (例如-60.5不能用一个字节表示(一个字节不能做小数或负数),并且可以用605表示(255是你可以拥有的最高数字)) –

+0

@Marc:我知道,你们都是对。我实际上有4个字节的lat,lon和elevation。而且它们实际上是浮点数组。我使用FileStream和BinaryReader将文件作为字节数组导入。然后使用:temp [0] = Trama [127]; temp [1] = Trama [126]; temp [2] = Trama [125]; temp [3] = Trama [124]; // 相反的顺序。 float p = BitConverter.ToSingle(temp,0);转换为浮动。但我简化了这个问题,因为这是我不理解的概念。但是你是对的,我应该从一开始就更清楚。但非常感谢! –

回答

4

幽州“数组”的问题,这使得它更容易:

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

现在,如果索引是非负它是第一个非零的指数。值是arr [index]。

如果您需要从FileStream中读取,只需循环读取并重复。如果您需要,可以使用不安全的代码进行破解,使其稍微更快。

+0

确定辉煌。XML部分如何,是否有任何c#模块可以帮助我?或者我必须做一个循环,并直接写入字符串到一个TXT文件? –

+0

@new - 'XmlSerializer'或'XmlDocument'或'XDocument'或'XmlWriter' - 很多选项。 –

+0

好的谢谢。最后我用过:TextWriter tw = new StreamWriter(path);因为我使用的结构非常简单,(只是位置和时间)。但我现在正在研究这些模块以用于未来的项目。尽管如此,非常感谢。我不知道如果没有计算器,我会为这个项目做些什么。它的工作速度比官方微软网站快一百万倍。你们可以为此骄傲!再次,万分感谢! –

相关问题