Конвертация (приведение) типов от массива байт к строке и int - C#
Формулировка задачи:
Добрый день. Искренне надеюсь на исправность ваших телепаторов, ибо судя по результатам поиска уж шибко некорректно я всё формулирую:
На "сервере" (голые Си) открываем конфигурируем/биндим сокет, после подключения клиента делаем:
На клиенте (C#):
Подскажите пожалуйста:
1) как корректно привести byte[] к int;
2) на сколько адекватен подход: buf = new byte[нужное кол-во байт];snd.Receive(buf); или это хрень, которая в реальности даст уйму косяков и прочь? Как тогда нужно "правильно" читать "нужное" кол-во байт из сокета?
struct stat buff; // Файл существует, его размер 3565 байт stat("temp.dat", &buff); // buf объявлен как char buf[1024]; sprintf(buf, "%ld", buff.st_size); // отправляем размер файла с тем, что бы после отправить сам файл построчно (знать на клиенте сколько байт нужно будет получить по факту) send(sock, buf, strlen(buf), 0);
// 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);
Решение задачи: «Конвертация (приведение) типов от массива байт к строке и 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]; // ...
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д