C# 如何将null附加到ByteArray?

C# 如何将null附加到ByteArray?,c#,arrays,bytearray,C#,Arrays,Bytearray,我正在编写一个需要与特定大小对齐的流。在不暴露数组外部RAM的敏感区域的情况下,追加null(或任何值)的正确方法是什么 例如,我需要将“byteArray.Length四舍五入”为pad的值: byte[] byteArray = Encoding.ASCII.GetBytes(preStream); long pad = (minBlobEntrySize * databaseCount) - byteArray.Length; Array.Copy(byteArray, 0, buf

我正在编写一个需要与特定大小对齐的流。在不暴露数组外部RAM的敏感区域的情况下,追加null(或任何值)的正确方法是什么

例如,我需要将“
byteArray.Length
四舍五入”为pad的值:

 byte[] byteArray = Encoding.ASCII.GetBytes(preStream);
 long pad = (minBlobEntrySize * databaseCount) - byteArray.Length;
 Array.Copy(byteArray, 0, buffer, relativeOffset2, byteArray.Length);
我知道以下是错误的,因为它可能会暴露敏感数据:

  Array.Copy(byteArray, 0, buffer, relativeOffset2, byteArray.Length + pad);
正确的处理方法是什么

byte[] buffer = new byte[byteArray.Length + pad];
这就是你要找的吗?其他字节将为零

编辑 如果您对以前的值使用缓冲区(正如我根据relativeOffset2值所假定的那样),您可以这样做:

 byte[] byteArray = Encoding.ASCII.GetBytes(preStream);
 long pad = (minBlobEntrySize * databaseCount) - byteArray.Length;
 Array.Copy(byteArray, 0, buffer, relativeOffset2, byteArray.Length);

 byte[] padBuff = new byte[pad]; //will be zeros...
 Array.Copy(padBuff, 0, buffer, relativeOffset2 + byteArray.Length, pad);
或者你可以用一个

for(int i=0; i< pad; i++)
    buffer[relativeOffset2 + byteArray.Length + i] = 0;
for(int i=0;i
当然,我假定您的缓冲区足够大。

C#中的值类型数组是(我知道我链接的文档称为“数值”类型,但它指的是值类型)。如果这是一个新的数组,您不需要做任何特殊的事情。在这种情况下,这意味着始终使用适当的大小声明数组,并将流复制到其中:

byte[] buffer = Encoding.ASCII.GetBytes(preStream);
byte[] byteArray = new byte[Math.Min(minBlobEntrySize * databaseCount, buffer.Length)]; 
Array.Copy(buffer, byteArray, buffer.Length);

看起来像是
数组。Resize
方法应该在这里执行您想要的操作

byte[] byteArray = Encoding.ASCII.GetBytes(preStream);
long pad = (minBlobEntrySize * databaseCount) - byteArray.Length;
Array.Resize(ref byteArray, byteArray.Length + pad);
Array.Copy(byteArray, 0, buffer, relativeOffset2, byteArray.Length);

请注意,在
Copy
方法中不需要
+pad
,因为长度将是调整大小的长度。

不确定公开敏感数据是什么意思,但我会直接写入流

long alignedLength = minBlobEntrySize * databaseCount;
while (stream.Length < alignedLength)
{
    stream.WriteByte(0);
}
long alignedLength=minBlobEntrySize*数据库计数;
while(stream.Length
我很困惑。。。RAM和指针与此有什么关系?您可能需要向我们展示一些代码来说明您的问题。您是否尝试检查流的长度,并在刷新时仅写入0字节,直到对齐为止?C#已被管理。你不会暴露敏感数据。您可能会因为阵列容量而出现异常,但不会公开敏感数据