Структурировать в ubyte[] или ubyte[] в struct для языка d
Как реализация структуры на языке D для ubyte []
или же ubyte []
в структуру, пожалуйста, братья, помогите ответить на этот вопрос, спасибо!
Если структура содержит string
или же char []
что делать?
Например, такая структура:
struct UserLogin
{
align(1):
ushort ClientId;
int AccectId;
string LoginUid;
string LoginPwd;
}
Внимание к моему приложению в сокете!
4 ответа
Чтобы преобразовать необработанные данные, предложенная идиома выглядит следующим образом:
struct_type* s = new struct_type;
ubyte[] ub = cast(ubyte[]) s[0..1];
struct_type* s2 = cast(struct_type*) ub.ptr;
Это не будет обрабатывать сериализацию строк и указателей, однако. Вам нужно будет сделать это вручную или с помощью библиотеки.
Я не думаю, что в стандартной библиотеке есть что-то для автоматической сериализации и десериализации структур в байтовые потоки. std.stream
делает это для множества основных типов, но не для целых структур. Поддержка Apache Thrift уже в пути. Среди сторонних решений вы можете ознакомиться с библиотекой сериализации Orange.
@Dev Wolf: Вы должны написать сериализацию / десериализацию самостоятельно. Помимо Orange, упомянутого CyberShadow, у вас также есть реализация протокола Thrift: http://klickverbot.at/code/gsoc/thrift/. Я помню, что некоторые ребята тоже работали над реализацией Google Protocol Buffer.
struct UserLogin
{
align(1):
ushort ClientId;
int AccectId;
char[10] LoginUid;
char[10] LoginPwd;
}
UserLogin* readByteToStruct = cast(UserLogin*)ne.data;
Будет ли возможность правильно принять данные...