Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
ahill_odessa
0 / 0 / 0
Регистрация: 09.04.2011
Сообщений: 6
09.04.2011, 16:14     Как изменить первые 5 байт в строке типа char #1
Ламерский вопрос! Есть строка,как изменить в ней первые 5 байт, в них должна храниться длина строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Messir
Сообщений: n/a
09.04.2011, 17:58     Как изменить первые 5 байт в строке типа char #2
ну, либо memcpy (если замена уже подготовлена в виде массива или строки), либо посимвольно (s[0] = 'a' s[1] = 'b' ...)

P.S. Что-то сомнительно, что длина строки выражается 5-ю байтами...
paradise
Сообщений: n/a
10.04.2011, 12:29     Как изменить первые 5 байт в строке типа char #3
'в строке типа char' - интересная строка
kpoxa
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
10.04.2011, 18:20     Как изменить первые 5 байт в строке типа char #4
С 5-ю байтами я согласен. 1, 2, 4 байта пожалуйста, а вот 5 ?!
Код
char szString[256] ;
char szTemp[] = 'Hello, World!' ;
long iSize = strlen(szTemp);

*((long*)szString) = iSize ;
memcpy(szString+sizeof(iSize), szTemp, iSize+1) ;
paradise
Сообщений: n/a
11.04.2011, 10:57     Как изменить первые 5 байт в строке типа char #5
Не понятно, как данный код позволит изменить первые 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 байта).
kpoxa
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
11.04.2011, 11:26     Как изменить первые 5 байт в строке типа char #6
>> С 5-ю байтами я согласен. 1, 2, 4 байта пожалуйста, а вот 5 ?!

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

P.S. Да и еще. long всегда 4-х байтный, это int зависит об платформы и может иметь длину 1, 2, 4, 8 и т.д. байт.
np_msn
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 46
11.04.2011, 11:35     Как изменить первые 5 байт в строке типа char #8
Привет.
Если я правильно понял, есть что-то типа:
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;
}
Удачи.
paradise
Сообщений: n/a
11.04.2011, 11:41     Как изменить первые 5 байт в строке типа char #9
>P.S. Да и еще. long всегда 4-х байтный, это int зависит об
>платформы и может иметь длину 1, 2, 4, 8 и т.д. байт.

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

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

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

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

Кода тут и так достаточно. Автор задал слишком расплывчатый вопрос и можно бесконечно долго гадать, что же он хотел спросить. Вместо этого можно указать ему на ошибки в вопросе, он их поправит и это сбережет кучу времени и вам и мне и автору.
Tneiro_Odessa
0 / 0 / 0
Регистрация: 13.07.2010
Сообщений: 3
11.04.2011, 15:46     Как изменить первые 5 байт в строке типа char #11
если делать в студии то
CString str;
str.Fromat('%5d%s',/*переменая длины стоки*/,/*сама строка*/);
John Paramol
Сообщений: n/a
11.04.2011, 17:18     Как изменить первые 5 байт в строке типа char #12
если уж сильно нужно пятибайтовое целое, его можно сделать самому
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.
А вообще, мне тоже кажется, что автор имел в виду нечто иное
ahill_odessa
0 / 0 / 0
Регистрация: 09.04.2011
Сообщений: 6
11.04.2011, 21:53  [ТС]     Как изменить первые 5 байт в строке типа char #13
С пятью байтами я действительно ошибся, длина будет 4. Насчёт строки типа char сорри, написал впопыхах . Будет буфер char *pszString, размер будет менятся. А хранить длину в буфере надо потому что буфер кодируется и предаётся на сервер, там раскодируется.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2011, 21:54     Как изменить первые 5 байт в строке типа char
Еще ссылки по теме:

C++ Неправильный вывод в строке типа char
Аргумент типа "unsigned char*" несовместим с параметром типа "const char*" C++
C++ Ошибка "аргумент типа char несовместим с параметром типа char*"

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

Или воспользуйтесь поиском по форуму:
ahill_odessa
0 / 0 / 0
Регистрация: 09.04.2011
Сообщений: 6
11.04.2011, 21:54  [ТС]     Как изменить первые 5 байт в строке типа char #14
В общем спасибо всем, уже получилось
Yandex
Объявления
11.04.2011, 21:54     Как изменить первые 5 байт в строке типа char
Ответ Создать тему
Опции темы

Текущее время: 18:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru