Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 09.04.2011
Сообщений: 6

Как изменить первые 5 байт в строке типа char

09.04.2011, 16:14. Показов 3462. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ламерский вопрос! Есть строка,как изменить в ней первые 5 байт, в них должна храниться длина строки
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.04.2011, 16:14
Ответы с готовыми решениями:

Работа с битами: как просмотреть и изменить заданный бит в переменной типа char?
Есть переменная типа char, как посмотреть в нем биты и изменять их?

Аргумент типа (const char*) несовместим с параметром типа (char*). Как исправить?
#include "Table.h" #include "Contour.h" #include "TwoShape.h" #include <iostream> int main() { Contour circle; ...

Как полю класса типа char* присвоить значение типа *char
Проблема в строчке 46 (не пинайте сильно за формат кода и за говнокод) #include "stdafx.h" #include <iostream>...

13
Messir
09.04.2011, 17:58
ну, либо memcpy (если замена уже подготовлена в виде массива или строки), либо посимвольно (s[0] = 'a' s[1] = 'b' ...)

P.S. Что-то сомнительно, что длина строки выражается 5-ю байтами...
paradise
10.04.2011, 12:29
'в строке типа char' - интересная строка
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
10.04.2011, 18:20
С 5-ю байтами я согласен. 1, 2, 4 байта пожалуйста, а вот 5 ?!
C
1
2
3
4
5
6
char szString[256] ;
char szTemp[] = "Hello, World!" ;
long iSize = strlen(szTemp);
 
*((long*)szString) = iSize ;
memcpy(szString+sizeof(iSize), szTemp, iSize+1) ;
0
paradise
11.04.2011, 10:57
Не понятно, как данный код позволит изменить первые 5 байт:
C++
1
2
3
4
5
6
char szString[256] ;
char szTemp[] = 'Hello, World!' ;
long iSize = strlen(szTemp);
 
*((long*)szString) = iSize ;
memcpy(szString+sizeof(iSize), szTemp, iSize+1) ;
Этот код отводит под размер строки 4 байта (если в реализации long имеет длину 4 байта).
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
11.04.2011, 11:26
>> С 5-ю байтами я согласен. 1, 2, 4 байта пожалуйста, а вот 5 ?!

Естественно, что используется только 4 байта, об этом и должна была намекнуть эта строка!
0
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
11.04.2011, 11:33
К стати, paradise, вместо того, чтобы язвить, дал бе лучше человеку код.
Может он просто ошибся с 5-ю байтами, у всех могут быть очепятки!

P.S. Да и еще. long всегда 4-х байтный, это int зависит об платформы и может иметь длину 1, 2, 4, 8 и т.д. байт.
0
0 / 0 / 8
Регистрация: 07.12.2010
Сообщений: 46
11.04.2011, 11:35
Привет.
Если я правильно понял, есть что-то типа:
C++
1
char s[] = 'Hello, World!';
а нужно получить
C++
1
char d[] = '00013Hello, World!';
Это можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <string.h>
int main()
{
    char s[] = 'Hello, World!';
    char d[256];
 
    sprintf(d, '%05d%s', strlen(s), s);
    return 0;
}
Удачи.
0
paradise
11.04.2011, 11:41
>P.S. Да и еще. long всегда 4-х байтный, это int зависит об
>платформы и может иметь длину 1, 2, 4, 8 и т.д. байт.

Б. Страуструп 'Язык программирования С++' (спец. издание) стр.113:
[цитата]
... По поводу размеров фундаментальных типов гарантируется следующее:
sizeof(int) <= sizeof(long)
[/цитата]

Как в этом случае 'long всегда 4-х байтный, это int зависит ... 8 и т.д. байт' ?
paradise
11.04.2011, 12:21
Code
1
 > sprintf(d, '%05d%s', strlen(s), s);
Не вижу смысла хранить длинну строки в текстовом формате. Тем более, что %05 указывает минимальное количество байт и если длинна строки будет больше 99999, то условия будут нарушены.

Если автор собирается хранить длинну строки в виде числа (длинной 5 байт), что , как было справедливо замечено выше почти всеми авторами, является по крайней мере странным, то автору не помешает:
- уточнить, как он собирается получать размер строки.
- пояснить, почему он использует именно массив char (C-строки) и почему в этом случае его не устраивает функция strlen.
- посмотреть в сторону строк С++ (string).
- запостить хотя бы кусочек кода. По крайней мере с объявлением этого массива, местом его инициализации и метом, в котором необходимо получить размер.

>К стати, paradise, вместо того, чтобы язвить, дал бе лучше человеку код.
>Может он просто ошибся с 5-ю байтами, у всех могут быть очепятки!

Кода тут и так достаточно. Автор задал слишком расплывчатый вопрос и можно бесконечно долго гадать, что же он хотел спросить. Вместо этого можно указать ему на ошибки в вопросе, он их поправит и это сбережет кучу времени и вам и мне и автору.
0 / 0 / 0
Регистрация: 13.07.2010
Сообщений: 3
11.04.2011, 15:46
если делать в студии то
CString str;
str.Fromat('%5d%s',/*переменая длины стоки*/,/*сама строка*/);
0
John Paramol
11.04.2011, 17:18
если уж сильно нужно пятибайтовое целое, его можно сделать самому
C++
1
2
3
4
5
6
7
8
9
10
class int40
{
  BYTE data[5];
  public:
  int40() {}
  int40(__int64 p) { *this=p; }
  unsigned __int64 operator=(unsigned __int64 p)
  { memcpy(this,&p,sizeof(*this));  return p&0xFFFFFFFFFF; }
  operator __int64() { __int64 res=0;  memcpy(&res,this,sizeof(*this));  return res; }
};
теперь, например, в том куске кода заменим long:
C++
1
2
3
4
5
char szString[256];
char szTemp[] = 'Hello, World!';
int40 iSize = strlen(szTemp);
*((int40*)szString) = iSize;
memcpy(szString + sizeof(iSize), szTemp, iSize+1);
но только этот пример не дает преимуществ, из-за использования strlen и memcpy;
единственное, что теперь под размер отведется 5 байт, но сам размер не превысит диапазона unsigned int.
А вообще, мне тоже кажется, что автор имел в виду нечто иное
0 / 0 / 0
Регистрация: 09.04.2011
Сообщений: 6
11.04.2011, 21:53  [ТС]
С пятью байтами я действительно ошибся, длина будет 4. Насчёт строки типа char сорри, написал впопыхах . Будет буфер char *pszString, размер будет менятся. А хранить длину в буфере надо потому что буфер кодируется и предаётся на сервер, там раскодируется.
0
0 / 0 / 0
Регистрация: 09.04.2011
Сообщений: 6
11.04.2011, 21:54  [ТС]
В общем спасибо всем, уже получилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2011, 21:54
Помогаю со студенческими работами здесь

Предположим, что переменная типа CHAR занимает 1 байт, переменная типа INTEGER занимает два байта
Предположим, что переменная типа CHAR занимает 1 байт, переменная типа INTEGER занимает два байта, а переменная типа REAL занимает 4 байта....

PHP изменить байт в строке
Дано: изображение Задача изменить 1 байт в изображении, как это сделать? Требуется работать не со строкой, символами... А с байтом

Как использовать функцию, выдающую через переменную типа байт результат, объём которого больше, чем байт?
Есть сканер отпечатков. Для него есть компонент ActiveX. У этого компонента есть функции. Среди них есть две похожих функции для получения...

Изменить программу для типа unsigned char
Подскажите пожалуйста, что нужно изменить в программе перевода числа, чтобы она правильно работала для введенного числа типа unsigned...

Условие типа if( масив типа char[x] [y] != переменная типа char) не срабатывает
Создал функцию ChangeWay(). Все, кроме if(map !=ar) (обе переменные типа char) работает нормально, а когда выполнение доходит до этого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru