Конвертация (приведение) типов от массива байт к строке и int - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день. Искренне надеюсь на исправность ваших телепаторов, ибо судя по результатам поиска уж шибко некорректно я всё формулирую: На "сервере" (голые Си) открываем конфигурируем/биндим сокет, после подключения клиента делаем:
struct stat buff;
// Файл существует, его размер 3565 байт
stat("temp.dat", &buff);
// buf объявлен как char buf[1024];
sprintf(buf, "%ld", buff.st_size);
// отправляем размер файла с тем, что бы после отправить сам файл построчно (знать на клиенте сколько байт нужно будет получить по факту)
send(sock, buf, strlen(buf), 0);
На клиенте (C#):
// 32768 - что бы мало не показалось... может тут "перегиб"?
private byte[] buf = new byte[32768];
...
// Далее дело происходит во внутреннем цикле:
// Быстро не нашел как корректно очистить массив, решил через костыль - создавать новый, оставляя старый на сборщика
buf = new byte[255];
// выше по тексту объявляю, конфигурирую,соединяюсь по сокету (snd)
snd.Receive(buf);
// Преобразование массива байт в строку "вроде" - корректно, приходит и отображается "положенное" 3565
MessageBox.Show(Encoding.Default.GetString(buf));
// Но уже след.строка, вместо ожиданных тех же самых 3565 возвращает 892745011
MessageBox.Show(Convert.ToString(BitConverter.ToInt32(buf, 0)));
// А ведь далее по тексту я хотел объявить новый буфер "нужного" размера
buf = new byte[BitConverter.ToInt32(buf, 0)];
// и получить в него уже сам "файл" (со стороны сервера будет построчное чтение из файла +  send(прочитанного))
snd.Receive(buf);
Подскажите пожалуйста: 1) как корректно привести byte[] к int; 2) на сколько адекватен подход: buf = new byte[нужное кол-во байт];snd.Receive(buf); или это хрень, которая в реальности даст уйму косяков и прочь? Как тогда нужно "правильно" читать "нужное" кол-во байт из сокета?

Решение задачи: «Конвертация (приведение) типов от массива байт к строке и int»

textual
Листинг программы
buf = new byte[255];
int received = snd.Receive(buf);
int fileSize = int.Parse(Encoding.ASCII.GetString(buf, 0, received));
buf = new buf[fileSize];
// ...

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы