Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++->C#] memcpy -> аналог, Из буфера в переменую 
V
    Опции темы
MuForum
Дата 30.11.2009, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 2
Всего: 4



Доброе время суток.
Работаю на "Microsoft Visual Studio 2008". (C#)

Необходимо перевести код с C++ на C#.
Код

byte buffer[4] = {10, 20, 30, 40};
int tmpbuff = 0;
// ----
memcpy(&tmpbuff, &buffer[0], sizeof(int));


Попробовал вот так сделать:
Код

byte[4] buffer = {10, 20, 30, 40};
int tmpbuff = 0;
unsafe
{
Marshal.Copy(buffer, 0, (IntPtr)tmpbuff, 4);
}

- Но при работе программа падает, проблема с получением указателя на переменную tmpbuff.


P.S. -> Как решить задачку?


# Добавлено: Решил задачу следующим образом.
Код

unsafe
{
var pointer = new IntPtr(&tmpbuff);
Marshal.Copy(buffer, 0, pointer, 4);
}

- Может быть кто-то ещё какие-то варианты знает?

Это сообщение отредактировал(а) MuForum - 30.11.2009, 01:34


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
tol05
Дата 30.11.2009, 01:45 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 36
Всего: 170



вообще говоря, для копирования массивов есть функция Array.CopyTo()

Но в данном конкретном случае... я не вижу ни одной причины, почему нельзя написать так
Код

byte[] buffer = {10, 20, 30, 40};
int tmpbuff = buffer[0];



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
MuForum
Дата 30.11.2009, 03:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 2
Всего: 4



Цитата(tol05 @ 30.11.2009,  01:45)
вообще говоря, для копирования массивов есть функция Array.CopyTo()

Но в данном конкретном случае... я не вижу ни одной причины, почему нельзя написать так
Код

byte[] buffer = {10, 20, 30, 40};
int tmpbuff = buffer[0];

Во-первых: Мне необходимо преобразовать 'n' кол-ва байт из буфера в переменную, а не скопировать часть буфера в другой буфер...
Во-вторых:
Код

byte[] buffer = {10, 20, 30, 40};
int tmpbuff = buffer[0];

- Ну наверно так нельзя делать только по той причине, что вы просто запишите в переменную значение 10; То есть значение первого элемента буфера.
- Закроем глаза и сошлемся на позднее время...

Это сообщение отредактировал(а) MuForum - 30.11.2009, 03:43


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
mrbrooks
Дата 30.11.2009, 08:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



Цитата(MuForum @  30.11.2009,  01:30 Найти цитируемый пост)
- Может быть кто-то ещё какие-то варианты знает?

 
Код

            byte [] b = {10, 20, 30, 40};
            int res = BitConverter.ToInt32(b,0);

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.