【问题标题】:Cannot write string to byte array with alignment?无法将字符串写入字节数组并对齐?
【发布时间】:2014-05-08 11:31:44
【问题描述】:

我目前编写了一个代码,用于将字符串转换为字节数组,然后将这些字节写入缓冲区字节数组。但是,由于某种原因,代码的对齐部分似乎停止了程序的执行。我已经对其进行了足够多的测试,知道它是“int DynamicAlign..”部分,但我无法弄清楚它为什么会发生。

public void WriteStr( string myString )
{
    byte[] myBytes = System.Text.Encoding.ASCII.GetBytes( myString );

    for( int i = 0; i < myBytes.Length; i ++ )
    {
        Buffer[ BytePeek ] = myBytes[ i ];
        BytePeek ++;
    }

    int DynamicAlign = ((myBytes.Length + 1) % ByteAlign != 0)
        ? ByteAlign - ((myBytes.Length + 1) % ByteAlign)
        : 0;
    BytePeek += (ushort)(1 + DynamicAlign);
}

如果您不知道字节对齐的工作原理,我发现这是额外信息:http://pastebin.com/tXzLWpBG

额外的“+ 1”和“1 +”用于考虑读取序列末尾的空终止字符串。

【问题讨论】:

  • seems to stop the execution of the program - 你是什么意思,它会崩溃,给出错误,永远循环(不太可能),会发生什么?
  • Converting a string to bytes 中找到的解决方案是否有理由不符合您的需求?为什么要重新发明轮子?
  • @mason:我相信这不起作用的原因是因为它实际上并没有处理填充缓冲区。 OP 正在缓冲字节并且必须填充它们以正确对齐它们,这告诉我这个方法运行多次,具有许多不同的值。
  • 你用BytePeek做什么?从您发布的代码中这并不明显..
  • 一些基本的数学运算(如int DynamicAlign 行)没有真正的理由可以“停止”执行。显然% 1 是不变的,但它应该不会对代码产生影响——您需要更好地了解“简单停止”的含义,或者显示能够重现问题的独立代码片段。

标签: c# bytearray data-conversion


【解决方案1】:

好的,所以问题是我没有设置写入缓冲区的对齐方式,因此它在模运算中给出了除以零的错误,因为字节对齐方式预设为 0...

【讨论】:

    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多