【发布时间】: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