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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> преобразование и адрес 
:(
    Опции темы
Void
Дата 7.5.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



zss, в данном конкретном случае все решается просто smile
Код
using System;
using System.IO;

ushort[] a = new ushort[] { 2, 3, 4, 5 };
MemoryStream ms = new MemoryStream();
BinaryWriter bw = new BinaryWriter(ms);
Array.ForEach(a, bw.Write);
f(ms.ToArray());
 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
zss
Дата 7.5.2006, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

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



Цитата(Void @  7.5.2006,  00:10 Найти цитируемый пост)
zss, в данном конкретном случае все решается просто 

и это считается просто ? smile

вызов как минимум 2-х конструкторов, 2-х деструкторов и еще копирование

вместо простого взятия адреса. О какой производительности может идти речь smile

Добавлено @ 09:35 
Цитата(Void @  7.5.2006,  00:10 Найти цитируемый пост)
Array.ForEach(a, bw.Write);

ForEach только под FW 2.0

у меня вроде он стоит, но такое ощущение, что цепляется 1.2

как в проекте явно задать 2.0 (VC 8.0) 
PM MAIL ICQ   Вверх
zss
Дата 7.5.2006, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

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



А... У меня CF 2.0 а он этого не держит

можно ли еще как скопировать, кроме ForEach ? 

Это сообщение отредактировал(а) zss - 7.5.2006, 10:32
PM MAIL ICQ   Вверх
Void
Дата 7.5.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Цитата(zss @  7.5.2006,  11:56 Найти цитируемый пост)
можно ли еще как скопировать, кроме ForEach ? 

Код
foreach (ushort x in a)
    bw.Write(x);


Цитата(zss @  7.5.2006,  11:27 Найти цитируемый пост)
О какой производительности может идти речь

Прежде чем жаловаться на производительность, нужно знать, каков обычно размер массива и как часто вызывается функция. Нужно быстрее — все придется делать в unsafe. Плата за типобезопасность. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
zss
Дата 7.5.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

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



Цитата(Void @  7.5.2006,  16:10 Найти цитируемый пост)
foreach (ushort x in a)
    bw.Write(x);

я нашел способ проще 
System.BlockCopy 
PM MAIL ICQ   Вверх
zss
Дата 7.5.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

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



кстати еще нужно сделать одно извращение

есть структура. Я могу ее преобразовать в массив байт.

Но мне нужно еще к этому массиву байт прицепить в конец массив ushort.
Это можно просто сделать, или нужно опять копированием извращаться ? 
PM MAIL ICQ   Вверх
Void
Дата 7.5.2006, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



zss, я не совсем понял, а как тут даже в C++ без копирования обойтись? 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
zss
Дата 8.5.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

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



Цитата(Void @  7.5.2006,  23:15 Найти цитируемый пост)
zss, я не совсем понял, а как тут даже в C++ без копирования обойтись?  


да... ты прав (сказал не подумав smile


Void, есть еще одна ерунда.

Я по сети передаю данные. Данные представляют из себя иерархическую структруру. Например:
Код

struct Node {
    unsigned char buffer[6];
    unsigned value;
    unsigned data;
};

struct List {
    unsigned char name[32];
    unsigned value;
    unsigned count_node;
};


тоесть сначала идет первый список, в котором указывается количество Node следующих за ним. Потом идут ноды, а потом опять список...

1. Я так понимаю, что в C# нельзя статически задать буфер
Код

public struct Node {
    public byte[6] buffer;
    public uint value;
    public uint data;
};

public struct List {
    public byte[32] name;
    public uint value;
    public uint count_node;
};



тоесть нужно разбирать руками и выделять под него память

2. Я получаю с сети поток байт. Хотелось бы не разбирать этот поток,
а применить сразу Marshal.PtrToStructure и получить сразу структуру

и сразу же ее поместить в список например такой
Код

struct S{
    ...
    List<SList> list;
    ...
}

struct SList{
    ...
    List<Node> nodes;
    ...
}



Можно ли это сделать ? или руками придется ? 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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