PDA

View Full Version : سوال: معادل این کدها در #C چگونه نوشته می شود



mossaferin
یک شنبه 26 شهریور 1391, 11:43 صبح
با سلام
معادل این کدها در #C چگونه نوشته می شود


type
TData=record
Command:Byte;
Code:Byte;
Reserve:Byte;
Field:Byte;
Data:array[0..254]of Byte;
end;


var
mem:TMemoryStream;
Data:TData;


begin
//write something to the mem

mem.Position:=0;
mem.Read(Data,100);




با تشکر

Farshid007
یک شنبه 26 شهریور 1391, 11:47 صبح
حالا زبونش چیه؟

mossaferin
یک شنبه 26 شهریور 1391, 12:13 عصر
دلفی .

danialafshari
یک شنبه 26 شهریور 1391, 12:14 عصر
فکر کنم پاسکاله :لبخند:

Farshid007
یک شنبه 26 شهریور 1391, 12:17 عصر
اولش متغیر ایجاد شده؟TData و ... اسم متغیر هستش؟

mossaferin
یک شنبه 26 شهریور 1391, 12:24 عصر
فکر نمی کردم که بایستی کدها توضیح داده بشن
ولی جهت اطلاع اون دسته از دوستانی که با دلفی آشنا نیستن ...
تیکه اول برنامه یه نوع داده تعریف میشه بانام TData


type
TData=record
Command:Byte;
Code:Byte;
Reserve:Byte;
Field:Byte;
Data:array[0..254]of Byte;
end;


اینجا یه متغییر از نوع TMemoryStream تعریف شده و یه نمونه از نوع داده TData با نام Data


var
mem:TMemoryStream;
Data:TData;



در اینجا نیز فرض می کنیم که به طریقی به memorstream مقدار دادیم و اون مقادیر رو توسط تابع read توی data مقدار دهی میکنیم

//write something to the mem

mem.Position:=0;
mem.Read(Data,100);


دستور mem.read از memorystream به تعداد 100 بایت خوانده و در نوع داده دیتا قرار می دهد و فیلدهای مربوطه مقدار دهی میشود.

مشکل تبدیل اینه که تابع memorystream.read در #C فقط یه آرایه از نوع بایت قبول میکنه .

Farshid007
یک شنبه 26 شهریور 1391, 12:51 عصر
بی خیال بابا من که گیج شدم:گیج:

SharpSabre
یک شنبه 26 شهریور 1391, 13:15 عصر
دستور mem.read از memorystream به تعداد 100 بایت خوانده و در نوع داده دیتا قرار می دهد و فیلدهای مربوطه مقدار دهی میشود.

مشکل تبدیل اینه که تابع memorystream.read در #C فقط یه آرایه از نوع بایت قبول میکنه .
شما می تونی از دستور
File.OpenRead(String Path).ReadByte();
از تابع
Using System.IO
استفاده کنی .

abcd_a
یک شنبه 26 شهریور 1391, 14:18 عصر
سلام
رکورد در پاسکال یا دلفی همون استراکچر در خانواده سی است
struct TDate
{
byte comment;
byte code;
byte Reseve;
byte Field;
byte[] Date=new byte[255];
};
مثل یک کلاس می تونی باهاش کار کنی

System.IO.FileStream mem;
TDate Date;

ehsan7007
یک شنبه 26 شهریور 1391, 14:32 عصر
چقدر دلفی آسونه ها!
بریم یاد یگیریم! :لبخند:

mossaferin
یک شنبه 26 شهریور 1391, 15:20 عصر
با تشکر از دوستان ولی ...


رکورد در پاسکال یا دلفی همون استراکچر در خانواده سی است



byte[] Date=new byte[255];
این خط موقع اجرا اشکال میگیریه
cannot have instance field initializers in structs


یعنی موقع تعریف استراکچر نمیشه از آرایه با طول مشخص استفاده کرد و بایستی که آرایه دینامیک باشه ...

شما می تونی از دستور
1
File.OpenRead(String Path).ReadByte();



این دستور هم مربوط به خواندن از فایل می باشد و درضمن ورودی این تابع هم یه متغییر از نوع آرایه بایت است ...

abcd_a
یک شنبه 26 شهریور 1391, 19:49 عصر
تو یک کلاس هم می تونی پیاده سازیس کنی من تو یه برنامه consol application نوشمش کدش به صورت زیر
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
TDate a = new TDate();
a.Date[0] = 100;

Console.ReadLine();
}
class TDate
{
byte comment;
byte code;
byte Reseve;
byte Field;
public byte[] Date=new byte[255];
}

}
}

mossaferin
دوشنبه 27 شهریور 1391, 18:10 عصر
ممنون ، اینکه بشه مثل یه کلاس باهاش برخورد کرد ، مشکل ما رو در خصوص تعریف آرایه با طول مشخص حل میکنه ولی همانطور که گفتم آرایه رو به شکل دینامیک هم میشه تعریفش کرد ....
اما مشکل اساسی تر خواندن از یه آرایه ، یا پوینتر یا در هر صورت از یه نقطه ای از حافظه س که بایستی به اون متغیر ها مقدار دهی بشه ...

ehsan7007
دوشنبه 27 شهریور 1391, 18:22 عصر
شما بگو دقیقا کارش چیه و می خوای چی کار کنی ، تا دوستان کد های نو تولید کنند براتون! :لبخند:

mossaferin
سه شنبه 28 شهریور 1391, 11:22 صبح
توی پست 6 کامل توضیح دادم
با این حال فرض کنید که یه آرایه از نوع بایت داریم به طول دلخواه که شامل یه سری داده س ، که در واقع همون دیتاهای مد نظر ماست
و یه نوع هم ساختیم که شامل یه تعدادی فیلد از انواع مختلفه ( byte وintوcharو ....) و میخواهیم که اون دیتا ها رو به این فیلد ها مقدار دهی کنیم
( البته با توجه به نوع و سایزشون)
اون برنامه تو دلفی دقیقا همین کار و میکنه
93029