PDA

View Full Version : دسترسی به بایت های یک متغیر



hossein-khoshseyar
شنبه 15 آبان 1389, 21:02 عصر
دوستان کسانی که c بلد هستن و از پوینتر و ... استفاده میکنن می دونن که توی c ما می تونیم وقتی که یک متغیر مثلا int64 که 4 بایت داره تعریف کردیم. بعد می تونیم مثلا به بایت سوم اون متغیر دسترسی داشته باشیم.یعنی فقط اون بایت رو با آدرس دهی از حافظه بخونیم

این کار توی وی بی چطوری امکان داره؟

مثلا فرض کنید که من قراره یک متغیر صحیح 64 بیتی رو در قالب چهار بایت به سریال یا هرجای دیگه بفرستم
چطور می تونم از طریق آدرس دهی و دسترسی به حافظه به این امر دست پیدا کنم
ممنون

b.mahsa
یک شنبه 16 آبان 1389, 14:37 عصر
اگر منظورتون رو درست متوجه شده باشم . به روش زير ميتونيد به هر بايتي از دادتون دسترسي پيدا كنيد



Dim MY_DATA() As Byte
' fill MY_DATA()
MsgBox(MY_DATA(2).ToString)

بايت سوم از متغير MY_DATA

ali_najari
یک شنبه 16 آبان 1389, 15:35 عصر
دوست عزيز يكي از روشهايي كه شما ميتونيد استفاده كنيد روشي هست كه دوست خوبمون گفتن ولي فكر كنم چيزي كه شما ميخوايد چيز ديگري باشه پس اگر چيز ديگري هست يكم بيشتر راجعه بهش توضيح بديد

علاوه بر روش بالا شما ميتونيد كه اول بايت كنيد و بعد به كد Acsii تبديلش كني



If TextBox1.Text <> ""Then
Dim UniCoding As System.Text.Encoding = System.Text.Encoding.Unicode
Dim TextToByte AsByte() = System.Text.Encoding.Unicode.GetBytes(TextBox1.Tex t)
Dim Ascii As System.Text.Encoding = System.Text.Encoding.ASCII
Dim ByteToAscii AsByte() = System.Text.Encoding.Convert(UniCoding, Ascii, TextToByte)

MsgBox((ByteToAscii(0).ToString))
MsgBox((TextToByte(0).ToString))
MsgBox(Chr(ByteToAscii(0).ToString))
MsgBox(Chr(TextToByte(0).ToString))
EndIf


ويا فقط ميتونيد به بايت تبديلش كنيد



Dim TextToByte AsByte() = System.Text.Encoding.Unicode.GetBytes(TextBox1.Tex t)

MsgBox((TextToByte(0).ToString))
MsgBox(Chr(TextToByte(0).ToString))

hossein-khoshseyar
یک شنبه 16 آبان 1389, 19:36 عصر
دوستان من منظورم این هست که فرض کنید یه متغیر از نوع سینگل تعریف کردیم
این متغیر 4 بایت جا می گیره درسته؟

خوب به این متغیر مقدار هم دادیم
حالا می خوایم ببینیم که مقدار قرار گرفته شده در بایت اول حافظه چیه

توی c که این طوری می نویسیم


*(char(&x)+0)
*(char(&x)+1)
*(char(&x)+2)
*(char(&x)+03

اینا دقیقا مقادیر اولین بایت تا چهارمین بایت رو می دن

من معادل وی بی شو میخوایم


البته من خودم امروز یه راهی پیدا کردم اما خیلی جالب نبود .اگه شما هم چیزی بلدید لطف کنید بگید

ali_najari
یک شنبه 16 آبان 1389, 20:24 عصر
البته من خودم امروز یه راهی پیدا کردم اما خیلی جالب نبود .اگه شما هم چیزی بلدید لطف کنید بگید

دوست عزیز اگه امکان داره راحتون رو بگید تا شاید بشه از اون راه الهام گرفت و تکمیلش کرد

hossein-khoshseyar
یک شنبه 16 آبان 1389, 22:15 عصر
دوست عزیز اگه امکان داره راحتون رو بگید تا شاید بشه از اون راه الهام گرفت و تکمیلش کرد
راه نیست
خود دات نت یک کلاس داره به اسم بیت کانورتور
system.bitconvertor
البته این کار من رو راه میندازه اما اون چیزی که من می خوام نیست
این در واقع میاد خودش عملیات تبدیل رو انجام می ده
دسترسی به حافظه توش مقدور نیست

b.mahsa
یک شنبه 16 آبان 1389, 23:55 عصر
فکر کنم متوجه سوالتون شدم:خجالت:
ببینید این کد به دردتون میخوره؟

Dim c As Single = value
Dim br As Byte() = BitConverter.GetBytes(c)

hossein-khoshseyar
دوشنبه 17 آبان 1389, 08:40 صبح
فکر کنم متوجه سوالتون شدم:خجالت:
ببینید این کد به دردتون میخوره؟

Dim c As Single = value
Dim br As Byte() = BitConverter.GetBytes(c)

دوست عزیز داری با ما شوخی می کنی
این رو که خودم گفتم
می گم که این دسترسی به حافظه نداره و خودش تبدیل انجام میده
چه طور میشه توی یک خوه حاهظه نوشت؟ شاید این سئوال واضح تر باشه
چه طور میشه توی یک خونه حافظه نوشت و یا از یک حونه حافظه خوند؟

b.mahsa
دوشنبه 17 آبان 1389, 11:00 صبح
جناب hossein-khoshseyar چرا عصباني ميشي . گفتم شايد روش استفاده از متدمون فرق ميكنه. كد رو گذاشتم.
الان فكر كنم مشكل تو نوشتن و خوندن دقيقا از يه آدرس مشخصه؟

به اين لينك نگاه كن شايد به كارت بياد.:افسرده:


http://www.neowin.net/forum/topic/627978-vbnet-memory-address/