Ваш размер файла 80 Bit будет 2 байта (16 бит). Вы не можете иметь файл размером 10 бит (всего 8, 16, 24, 32, 40 ...). На диске размер, выделенный для файла, может быть меньше размера кластера. Если размер кластера на диске составляет 4096 байт, а размер файла меньше размера кластера, файловая система будет выделять память размера кластера.
Размеры указаны в байтах, поэтому, если у вас есть строка "00101"
(5 бит) в представлении байтов, она будет 00000101
(8 бит).
В вашем случае YOR строка "0101110011"
(12 бит) - это два байта:
"01"
в строку, которая будет 00000001
в представлении байт
"01110011"
в строку, которая будет 01110011
в байте
Secon d string имеет длину 8, поэтому байт будет выглядеть как эта строка.
Ваша строка начинается с '0'
, но вы можете опустить '0'
, так как они не полезны в начале. Это означает, что в байтах значения 01110011
и 1110011
одинаковы.
Hepler:
byte[] StringToBytesArray(string str)
{
var bitsToPad = 8 - str.Length % 8;
if (bitsToPad != 8)
{
var neededLength = bitsToPad + str.Length;
str = str.PadLeft(neededLength, '0');
}
int size= str.Length/8;
byte[] arr = new byte[size];
for (int a = 0; a < size; a++)
{
arr[a] = Convert.ToByte(str.Substring(a * 8, 8), 2);
}
return arr;
}
Кроме того, вы должны использовать BinaryWriter
вместо StreamWriter
:
string str = "0101110011";
byte[] arr = StringToBytesArray(str);
Stream stream = new FileStream("D:\\test.dat", FileMode.Create);
BinaryWriter bw = new BinaryWriter(stream);
foreach (var b in arr)
{
bw.Write(b);
}
bw.Flush();
bw.Close();
Кроме того, этот пример работает для различных длин строк.
После считывания значения из вашего файла вы получите 2 байта, которые затем конвертируете в string
. Но строка из этих байтов будет "0000000101110011"
(с ненужным '0'
в начале).
Чтобы получить строку, которая начинается от '1'
:
string withoutZeroes =
withZeroes.Substring(withZeroes.IndexOf('1'), str.Length - withZeroes.IndexOf('1'));
После всех операций (с строкой "0101110011"
) ваш файл будет иметь размер 2 байта (16 бит), но файловая система выделяет больше памяти для нее (размера выделено память будет эквивалентна размеру кластера).
Вы хотите, чтобы файл с текстом '0101110011' с размером 10 бит? –
@ Roma Нет, я хочу сохранить это как .data – InvBoy
Вы ожидаете, что сохранение «10101010» в файл будет производить в конце 1-байтовый файл размера? –