Обьясните мне, пожалуйста, почему я добавляю в память два байта а получаю шесть ?
code_24275.txt
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
|
|||
карма: 0 |
| ||
файлы: 1 | code_24275.txt [1KB] [106] |
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
logingin, ты добавляешь не два байта, а три за раз, потому, что применяешь запись типа PString, а этот тип нулевым байтом добавляет длину строки, а целое число в тексте занимает два байта. Итого: все правильно, два по три -- получается шесть
А вот теперь объясни, что ты хочешь сохранить |
|||
карма: 22 |
|
Ответов: 1429
Рейтинг: 50
|
|||
nesco, я хочу писать ответ сервера в память, затем посимвольно складывать его из чанков. Для этого мне надо понять как накапливать ответ сервера в неизменном виде, и работать с ним посимвольно.
------------ Дoбавленo в 01.27: Но это трудно, вот эта схема тоже не работает, почему?:
|
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
login писал(а): вот эта схема тоже не работает, почему?Chr -- это один символ с байтовым значением в диапазоне от 0 до 255, а не ДВА символа строки, это уже будет два Chr. login, складывается впечетление, что я тебе Америку открываю, или ты этого никогда не знал |
|||
карма: 22 |
|
Ответов: 1429
Рейтинг: 50
|
|||
nesco, не знал, я говорил, что я не программист. Мне просто очень надо, вот я и занимаюсь этим без знаний вообще.
Я в точности соответствую категории "Пользователь" |
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
login писал(а): я не программистЯ -- тоже |
|||
карма: 22 |
|
Ответов: 1429
Рейтинг: 50
|
|||
карма: 0 |
| ||
файлы: 1 | code_24276.txt [1.4KB] [117] |
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
login, короче, если просто, то строка -- это символьное отображение бинарных байтовых данных
------------ Дoбавленo в 01.55: login писал(а): но где делась вторая часть "а2"HEX -- это ТЕКСТОВОЕ представление шестнадцатиричного формата бинарных данных, где каждый символ отображает полубайт в диапазоне значений от 0 до 15, два символа отображают байт. ИТОГО: четыре символа, а пишим только два в типе Word ------------ Дoбавленo в 01.58: login, используй посимвольное чтение строки с преобразованием ChrToInt и побайтную запись. Или, что еще лучше, используй StreamCopy, где сразу можно задать нужную длину и считать ее, предварительно записав в MemoryStream и установив там нужную позицию чтения. После копирования указатель позиции в MemoryStream автоматически переместится на следующий байт за последним символом копируемого блока ------------ Дoбавленo в 02.02: А еще лучше, посмотри мой пример из параллельной ветки -- http://forum.hiasm.com//getfile/24269, он тебе может сильно помочь, там как раз реализован метод блочного копирования |
|||
карма: 22 |
|
Ответов: 1429
Рейтинг: 50
|
|||
nesco писал(а): предварительно записав в MemoryStream |
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
login писал(а): весь, кусочный, ответ сервера в MemoryStream, спина к спине?Через накопитель потока, схему не раз уже приводили |
|||
карма: 22 |
|
Ответов: 1429
Рейтинг: 50
|
|||
nesco писал(а): пример из параллельной ветки------------ Дoбавленo в 02.18: nesco, это накопитель потока?
nesco писал(а): схему не раз уже приводили------------ Дoбавленo в 02.29: Не понятно, почему!! требуется два вызова, чтобы вытащить данные из памяти, они что там храняться раздельно?
|
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
login писал(а): это накопитель потока?Да, строкового потока ------------ Дoбавленo в 02.31: login писал(а): Я думал я, в начале темы, и привел схему "накопителя" который накапливает поток прямо в MemoryStreamЭто очень медленный накопитель ------------ Дoбавленo в 02.34: login писал(а): требуется два вызова, чтобы вытащить данные из памятиИнтересно, а четыре разделить на два (длина типа Word в байтах) сколько будет |
|||
карма: 22 |
|
Ответов: 1429
Рейтинг: 50
|
|||
nesco писал(а): четыре разделить на два1. hub >> "a1" >> преобразование в другой формат >> запись в элемент MemoryStream. 2. hub >> "a2" >> преобразование в другой формат >> запись в элемент MemoryStream (притулить к тому, что уже там в памяти есть) Извлечение: элемент MemoryStream >> преобразование в другой формат >> "a1a2" почему нельзя так просто? |
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
login писал(а): почему нельзя так просто?Да потому, что тип указан dtWord, вот почему, а это записывается и читается по два байта, неужели это понять нельзя |
|||
карма: 22 |
|
Ответов: 1429
Рейтинг: 50
|
|||
А с накопителем вообще перестало работать:
code_24277.txt Как записать, накопленную, строку в MemoryStream? |
|||
карма: 0 |
| ||
файлы: 1 | code_24277.txt [2.1KB] [148] |