PDA

View Full Version : شمارنده ی 64 بیتی



p3m4ni
چهارشنبه 06 شهریور 1392, 00:17 صبح
سلام
من یه آرایه از جنس unsigned char با 8 عضو دارم که میخوام به کل این 64 بیت از 0 تا انتها مرحله به مرحله اضافه بشه یعنی تمام حالات یک عدد 64 بیتی
اگه کمک کنید ممنون میشم

مهرداد صفا
چهارشنبه 06 شهریور 1392, 00:41 صبح
با سلام.
اگر مطمئنید منظورتون c++ نیست و سوال در مورد c# دارید لطفا بیشتر توضیح بدهید.
آیا قصد دارید از 0 تا UInt64.MaxValue را در آرایه از Char قرار بدهید؟

p3m4ni
چهارشنبه 06 شهریور 1392, 09:39 صبح
سلام...مرسی جواب دادین...
روشش مهم نیست فقط میخوام از 0 تا 18446744073709551616 رو بشمارم البته نتایج هر مرحله در 8 تا آرایه char قرار بگیره.
بازم مرسی.

مهرداد صفا
چهارشنبه 06 شهریور 1392, 13:05 عصر
سلام خواهش می کنم.
char در .net به صورت یونیکد و 32 بیت (معادل char_t و WCHAR در c++) میباشد و در نتیجه باید 4 کاراکتر داشته باشیم. البته راههای مختلفی هم برای ایجاد byte و تبدیل به رشته ansi وجود دارد. اصل راهکار هم در c# و c++ یکسان است. فقط...
این تاپیک (http://barnamenevis.org/showthread.php?406364-%D8%AE%D9%88%D8%A7%D8%B3%D8%AA%D8%A7%D8%B1-%D8%A8%DB%8C%D8%B1%D9%88%D9%86-%D8%A7%D9%86%D8%AF%D8%A7%D8%AE%D8%AA%D9%86-aradrobo-%D8%A7%D8%B2-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A8%D9%87-%D8%AF%D9%84%DB%8C%D9%84-%D9%87%DA%A9-%D8%A7%DA%A9%D8%A7%D9%86%D8%AA) رو مطالعه بفرمایید! به دلیل مسائلی از این دست، با احتیاط بیشتری با تاپیکهایی از این دست برخورد می شود. در صورتی که نیت خیر دارید، پیام خصوصی بدهید تا راهنماییتون کنم.

مهرداد صفا
چهارشنبه 06 شهریور 1392, 14:58 عصر
با سلام مجدد. امیدوارم حسن نیت من رو درک کرده باشید.
ابتدا اشتباه پست قبلی را اصلاح می کنم؛ char ها در .net 16 بیت یا دو بایت فضا اشغال می کنند و فکر می کنم آرایه ای از byte مورد نظر شما بوده باشد. به هر حال هر دو مورد رو خدمتتون عرض خواهم کرد.

برای کپی کردن اعداد 64 بیتی از 0 تا UInt64.MaxValue در آرایه چهار عضوی از char:
1- تابع RtlMoveMemory را به صورت زیر تعریف کنید:

[System.Runtime.InteropServices.DllImport("kernel32",EntryPoint= "RtlMoveMemory")]
static extern void CopyMemory (ref char FirstItemOfDestinationArray,ref UInt64 sourceNumber,int lentgh=8);

برای دیدن مثالهایی از تابع CopyMemory این (http://barnamenevis.org/showthread.php?364508-%D8%AA%D8%A7%D8%A8%D8%B9-%D9%87%D8%A7%DB%8C-%D8%A7%DB%8C-%D9%BE%DB%8C-%D8%A2%DB%8C-TextOut-%D9%88-CopyMemory) و این تاپیک (http://barnamenevis.org/showthread.php?414492-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D9%85%D9%82%D8%A7%D8%AF%DB%8C%D8%B1-RGB-%D8%A8%D9%87-%D9%BE%DB%8C%DA%A9%D8%B3%D9%84-%DB%8C%D8%A7-%DB%8C%DA%A9-%D8%B9%DA%A9%D8%B3) را بررسی کنید.
2- یک آراه از char تعریف کنید:

char[] array=new char[4];


3- در یک حلقه از صفر تا UInt64.MaxValue هر بار شمارنده 64 بیتی حلقه را در آرایه چهار عضوی کپی کنید:

for(UInt64 UI=0;UI<=UInt64.MaxValue;UI++)
{
CopyMemory(ref array[0],ref UI);
Application.DoEvents();
textBox1.Text = new string(array);
//...
}

و همانطور که می بینید در هر مرحله 8 بایت با استفاده از تابع RtlMoveMemory از آدرس UI که یک UInt64 است به اولین خانه از array کپی شده و تمام اعضای آن را مقدار دهی می کند.

برای کپی کردن یک UInt64 در byte[8]:
1- تابع RtlMoveMemroy را به این صورت تعریف کنید:

[System.Runtime.InteropServices.DllImport("kernel32", EntryPoint = "RtlMoveMemory")]
static extern void CopyMemory2(ref byte FirstItemOfDestinationArray, ref UInt64 sourceNumber, int lentgh = 8);


2- و به این صورت اعداد را تولید و به بایت تبدیل کنید:

byte[] array2 = new byte[8];
for(UInt64 UI=0;UI<=UInt64.MaxValue;UI++)
{
CopyMemory2(ref array2[0], ref UI);
//do another task...
}

دقت داشته باشید که چنین عملیاتی نیاز به زمانی طولانی برای پردازش دارد.

p3m4ni
چهارشنبه 06 شهریور 1392, 15:40 عصر
مرسی دوست من...:لبخندساده:

p3m4ni
چهارشنبه 06 شهریور 1392, 15:47 عصر
ی سوال...ببخشید من خیلی بوقم...
اینجا ظاهرا فقط تابع رو دکلر کردیم..پ باقیش کو؟:لبخند:
هر چی باشه زیر سر اون خط قبلیه هست...

omidshaman
چهارشنبه 06 شهریور 1392, 18:55 عصر
چرا 2 جا تاپیک میزنی این چه وضعیه آخه ؟!!!!!
http://barnamenevis.org/showthread.php?416365-%D8%B4%D9%85%D8%A7%D8%B1%D9%86%D8%AF%D9%87-%DB%8C-64-%D8%A8%DB%8C%D8%AA%DB%8C

p3m4ni
چهارشنبه 06 شهریور 1392, 22:55 عصر
چرا 2 جا تاپیک میزنی این چه وضعیه آخه ؟!!!!!
http://barnamenevis.org/showthread.php?416365-%D8%B4%D9%85%D8%A7%D8%B1%D9%86%D8%AF%D9%87-%DB%8C-64-%D8%A8%DB%8C%D8%AA%DB%8C
چون میخوام هر دو روی کردش رو یاد بگیرم...هم C# هم C++

مهرداد صفا
پنج شنبه 07 شهریور 1392, 00:23 صبح
خواهش می کنم.
اگر منظور شما تابع RtlMoveMemory باشد که در برنامه ما به عنوان CopyMemory معرفی شد، در آدرس
C:\windows\system32\kernel32.dll تعریف شده است و از توابع سیستم عامل محسوب می شود.
این فایل (kernel32.dll) یک dll یا dynamic link library است. معمولا در کتابخانه ها (فایلهای dll( یک سری توابع و کلاس پرکاربرد تعریف می شود و در برنامه های مختلف مورد استفاده قرار می گیرد.
برای تولید رشته یunicode از کد زیر استفاده کنید:

//in the name of god
//اللهم صل علی محمد و آل محمد


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Data.OleDb;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{


[System.Runtime.InteropServices.DllImport("kernel32", EntryPoint = "RtlMoveMemory")]
static extern void CopyMemory(ref UInt16 FirstItemOfDestinationArray, ref UInt64 sourceNumber, int length = 8);


public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
this.Show();
UInt16[] array=new UInt16[4];
System.Threading.Thread thread2 = new System.Threading.Thread(delegate()
{
for (UInt64 i = 0; i <= UInt64.MaxValue; i++)
{
CopyMemory(ref array[0], ref i);
textBox1.Text = new string(array.Select(c => (char)c).ToArray());

//...
System.Threading.Thread.Sleep(10);
Application.DoEvents();
}
});
thread2.Start();






} }
}


و برای تولید رشته ansi با طول 8 کاراکتر:




//in the name of god
//اللهم صل علی محمد و آل محمد


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Data.OleDb;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{


[System.Runtime.InteropServices.DllImport("kernel32", EntryPoint = "RtlMoveMemory")]
unsafe static extern void CopyMemory2(void* FirstItemOfDestinationArray,ref UInt64 sourceNumber, int length = 8);

public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
this.Show();

unsafe
{
fixed (sbyte* buffer =new sbyte[8])
{

for (UInt64 i = 0; i <= UInt64.MaxValue; i++)
{
CopyMemory2(buffer, ref i);
textBox1.Text = new string(buffer, 0, 8);
//...
Application.DoEvents();
}
}

}
} }
}


فراموش نکنید از منوی Project>>Properties گزینه Allow unsafe code را checked کنید.
برای اطلاعات بیشتر به لینکهای زیر مراجعه کنید:
Dynamic-link library - Wikipedia, the free encyclopedia (http://en.wikipedia.org/wiki/Dynamic-link_library)
RtlMoveMemory routine (Windows Drivers) (http://msdn.microsoft.com/en-us/library/windows/hardware/ff562030%28v=vs.85%29.aspx)
unsafe (C# Reference) (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28UNSAFE_CSHARPKEYWORD%29;k%28TargetFrameworkM oniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29;k%28DevLan g-CSHARP%29&rd=true)
fixed Statement (C# Reference) (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28FIXED_CSHARPKEYWORD%29;k%28TargetFrameworkMo niker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29;k%28DevLan g-CSHARP%29&rd=true)
]Unsafe Code and Pointers (C# Programming Guide) (http://msdn.microsoft.com/en-us/library/t2yzs44b%28v=vs.100%29.aspx)
Pointer types (C# Programming Guide) (http://msdn.microsoft.com/en-us/library/y31yhkeb%28v=vs.100%29.aspx)

FastCode
پنج شنبه 07 شهریور 1392, 01:36 صبح
https://developer.nvidia.com/nsight-eclipse-edition یا https://developer.nvidia.com/nsight-visual-studio-edition-features رو دانلود کن.

http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html رو هم بخون.
سعی کن قبل از دو سال دیگه بهم PM بدی.چون ممکنه بعد از اینکه درسم تموم بشه از ایران برم.ممکنه دیر جواب بدم.

واقعا درک نمیکنم.من نمیفهمم یا همه خودشون رو زدن به نفهمیدن.
اگر شما میتونستی امکانات سختافزاری ای فراهم کنی که بتونی برنامه مورد نظرت رو در کمتر از چند ماه اجرا کنی میتونستی پول بدی به یک نفر دیگه که بلده برات اجرا کنه.خودت رو هم اذیت نمیکردی.
باور کن شوخی و تعنه نیست.خیلی جدی گفتم.

در ضمن روی من هم برای انجامش حساب نکن.مال من هنوز سر جاشه.عقلم رو میگم.