Хороший вопрос. Технически, вы можете сделать это, сначала преобразовав массив символов, а затем преобразовав его в байты. Однако строки в .NET по умолчанию кодируются в Юникоде (а не в ASCII), поэтому это сложно.
Если это вообще возможно, вы должны попытаться извлечь varbinary из файла в виде байтового массива, используя FileStream, из которого вы читаете, вместо StreamReader, который выполняет преобразования кодирования в и из типа кодировки файла.
Проблема этого межбайтового пристрелки заключается в том, что определенные байт-коды имеют особое значение в каждой кодировке Unicode, предоставляя декодеру информацию о количестве байтов, которые он должен извлечь для декодирования следующего символа. При преобразовании между различными кодировками Unicode и кодировкой строк в .NET UTF-8 для строк будут получены, потеряны и изменены байты. Когда это струна, нет ничего важного; информация о кодировке остается со строкой. Когда это двоичные данные, кодирование и декодирование могут искажать их, если это не сделано очень специфическим способом.
Единственный способ, которым это будет работать безупречно, - это если вы записываете файл, используя кодировку ASCII, а затем считываете его обратно таким образом, что каждый отдельный байт будет обрабатываться как один символ. Затем вы можете просто преобразовать каждый символ обратно в байт, и более значимый байт UInt16 за кулисами Syetem.Char, который является нулевым заполнением для байта, поданного в этот символ, будет отброшен.
var reader = new StreamReader(new FileStream("test.csv"), Encoding.ASCII);
var varBinaryString = reader.Read(<wherever the varbinary is in the file/line>);
var byteArray = varBinaryString.ToCharArray().Select(c=>(byte)c).ToArray();
Технически, вы можете использовать его в любой кодировке Unicode, но вам нужно знать много подробностей о том, как вы записали эти байты и как читатель читает их обратно, чтобы вы могли выполнить правильные действия. кодирование и расширение (или дефляция) по мере необходимости для получения исходного потока байтов.
РЕДАКТИРОВАТЬ: Версия .NET 2.0 - нет Linq:
StreamReader reader = new StreamReader(new FileStream("test.csv"), Encoding.ASCII);
string varBinaryString = reader.Read(<wherever the varbinary is in the file/line>);
char[] charArray = varBinaryString.ToCharArray();
byte[] byteArray = new byte[charArray.Length];
for(int i=0; i< charArray.length; i++)
{
byteArray[i] = (byte)charArray[i];
}