Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > [C++->C#] memcpy -> аналог


Автор: MuForum 30.11.2009, 01:30
Доброе время суток.
Работаю на "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);
}

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

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

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

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

Автор: MuForum 30.11.2009, 03:42
Цитата(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; То есть значение первого элемента буфера.
- Закроем глаза и сошлемся на позднее время...

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

 
Код

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)