Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2012, 01:07   #1
iukash
учу английский...
Форумчанин
 
Аватар для iukash
 
Регистрация: 04.04.2009
Сообщений: 480
По умолчанию Перевести массив байтов в int и string на языке Си

Вообще мне это нужно для МК, но язык Си думаю подойдет. На C# все просто
Код:
byte[] data; //в data первые 4 байта int - длина string, остальные string
int i = BitConverter.ToInt32(data, 4);
string str = Encoding.UTF8.GetString(data, 4, i);
Как это реализовать на C, без C++?
"Мы можем что-то изменить и своими силами..."
"Начнешь с себя, примером ближнему поможешь..."
iukash вне форума Ответить с цитированием
Старый 11.05.2012, 01:41   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
char data[128]; // буфер данных
...
int i = *(int *) data;
char str[128] = { 0 };
strncpy(str, buff + sizeof(i), i);
понятно, что это не кросплатформенно (хотя если передавать данные буфера в стандартизированном порядке байт, например сетевом, и однозначно определить размер int, то можно сделать и кросплатформенно)

а вообще в С размер строки ПЕРЕД строкой хранить глупо. ведь строка заканчивается '\0', поэтому в буфер можно сколько угодно запихать строк и считывать в цикле, пока не дошли до конца буфера, либо пока вновь считанная строка не пуста

как то так:
Код:
void foo(const char *buff, size_t size)
{
	size_t offset = 0;
	const char *str = 0;

	while (offset != size) {
		str = buff + offset;

		if (*str == '\0')
			break;

		printf("%s\n", str);
		offset += strlen(str) + 1;
	}
}

...

char buff[] = "str1\0str2\0ololo\0preved medved\0paka krosav4eg";
foo(buff, sizeof(buff));
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 11.05.2012 в 01:58.
pproger вне форума Ответить с цитированием
Старый 11.05.2012, 10:09   #3
iukash
учу английский...
Форумчанин
 
Аватар для iukash
 
Регистрация: 04.04.2009
Сообщений: 480
По умолчанию

Спасибо, как доберусь до работы попробую! Думаю решение для строк должно подойти!
"Мы можем что-то изменить и своими силами..."
"Начнешь с себя, примером ближнему поможешь..."
iukash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перевести char в int? TwiX Общие вопросы C/C++ 4 17.09.2009 11:52
Преобразование int в String^ в С++ Mixasik Помощь студентам 1 21.06.2009 18:57
Перевести Int в String Д'якон Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 26.11.2008 22:04
преобразовань int B string Termo Общие вопросы C/C++ 2 05.05.2008 21:34
Как перевести int в char в C? Dantes_1986 Общие вопросы C/C++ 4 25.12.2007 11:31