PDA

View Full Version : تبدیل فایل wave به hex



elaheh85_b
یک شنبه 06 خرداد 1386, 09:42 صبح
سلام
من چطور می تونم فایل wave رو به hex تبدیل کنم
اگه می شه منو راهنمایی کنید

Keramatifar
یک شنبه 06 خرداد 1386, 12:20 عصر
دوست عزیز
برای اینکار فکر نکنم VB مناسب باشه
بهر حال من کد به زبان C رو برات می ذارم:



FILE *in,*out;
char ch;
in=fopen("c:one.wav","rb");
out=fopen("c:tow.txt","w");
while(!feof(in))
{
ch=getc(in);
fprintf(out,"%x",ch);
}
fcloseall();

__H2__
یک شنبه 06 خرداد 1386, 12:59 عصر
سلام
منظورتان را دقیق تر بگید؟؟ شما میخواهید فایل wav مورد نظر را به فایل متنی حاوی کدهای مبنای 16 تبدیل کنید ؟؟؟؟؟؟؟؟؟؟؟؟؟؟ چون در باطن کدها به صورت مبنای 16 است !!!!

دوست عزیز، کاربر Wish Master (http://www.barnamenevis.org/forum/member.php?u=3349)، چرا با VB نمیشه ؟؟؟؟؟؟؟؟؟؟؟؟؟؟ یا مناسب نیست ؟؟؟؟؟؟

Keramatifar
یک شنبه 06 خرداد 1386, 13:48 عصر
نظر من اینه که همیشه برای هرکاری باید از ابزار مناسبش استفاده کرد
به قول خودم: :چشمک:
نه هیچوقت با اره برقی میوه پوست بکن، نه هیچوقت با چاقو درخت قطع کن

h_sadeghynejad
یک شنبه 06 خرداد 1386, 16:10 عصر
i think vb.net is great on this action and every action
the power of c#,c++ is like than vb
is't it?


اول اینکه دوست عزیز به انگلیسی ننویس دوم اینکه من هم موافقم برای هر کاری باید از ابزار خودش استفاده کرد و نباید با تعصب به یه چیزی چشم خودمون رو روی چیزهای دیگه ببندیم برای کار با سخت افزار , برنامه های سیستمی و برنامه های پیشرفته قدرت C خیلی بیشتر هستش و اصلا قدرت Vb قابل مقایسه با قدرت ++C , C نیستش

Alireza_Salehi
یک شنبه 06 خرداد 1386, 18:06 عصر
دوست عزیز
برای اینکار فکر نکنم VB مناسب باشه
بهر حال من کد به زبان C رو برات می ذارم:



FILE *in,*out;
char ch;
in=fopen("c:one.wav","rb");
out=fopen("c:tow.txt","w");
while(!feof(in))
{
ch=getc(in);
fprintf(out,"%x",ch);
}
fcloseall();


این کدتون ایراد داره چون یک فایل 200 تا 300 کیلویی رو میکنه چندین مگابایت!
یک فایل 270 کیلویی رو با این کد تبدیل کردم تا وسطاش که رفت فایل خروجی شده بود 277 مگابایت !

اینم کدش با وی بی:


Dim bytes() As Byte
Dim output As String = ""
Try
bytes = File.ReadAllBytes("مسیر فایل ورودی")
For i As Integer = 0 To bytes.Length - 1
output += Hex(bytes(i))
Next
File.WriteAllText("مسیر فایل خروجی", output, System.Text.Encoding.ASCII)
Catch ex As Exception
MessageBox.Show(ex.ToString())
EndTry

این کد برای تبدیل فایل باینری به فایل متنی هگزادسیمال هستش(کاری که Hex Viewer ها انجام میدن - 8 بیت 8 بیت به Hex تبدیل میکنن).
دوستان اگر ممنکه لطف کنند بگن خوندن نوشتن فایل و تبدیل باینری به هگزادسیمال چه فرقی در وی بی و سی داره تا ما هم یاد بگیریم!

elaheh85_b
دوشنبه 07 خرداد 1386, 18:18 عصر
من باید دو فایل Wave رو با هم مقایسه کنم بنابرین باید به hex تبدیل کنم بعد دو تا hex رو با هم مقایسه کنم ولی کدی که Wish Master نوشتن بعد از تبدیل دوباره به wave درست عمل نمی کنه
به نظر شما با دستورات اسمبلی راحت تر می شه به نتیجه رسید ؟

__H2__
دوشنبه 07 خرداد 1386, 18:35 عصر
سلام

من باید دو فایل Wave رو با هم مقایسه کنم بنابرین باید به hex تبدیل کنم بعد دو تا hex رو با هم مقایسه کنم ولی کدی که Wish Master نوشتن بعد از تبدیل دوباره به wave درست عمل نمی کنه
به نظر شما با دستورات اسمبلی راحت تر می شه به نتیجه رسید ؟

میخوای فایل wav را به hex تبدیل کنی که ببینی برابرند ؟؟؟؟؟؟؟؟؟

Alireza_Salehi
دوشنبه 07 خرداد 1386, 19:23 عصر
من باید دو فایل Wave رو با هم مقایسه کنم بنابرین باید به hex تبدیل کنم بعد دو تا hex رو با هم مقایسه کنم ولی کدی که Wish Master نوشتن بعد از تبدیل دوباره به wave درست عمل نمی کنه
به نظر شما با دستورات اسمبلی راحت تر می شه به نتیجه رسید ؟

میشه یه کم بیشتر توضیح بدی چی کار می خوای بکنی !

این کدی که من در پست 6 گذاشتم اگر خروجیش رو دوباره تبدیل به باینری کنی مثل اولش میشه.

__H2__
سه شنبه 08 خرداد 1386, 09:30 صبح
سلام
اول : دوست عزیز کاربر titbasoft ! آن یک شوخی بود نه ناشی از عصبانیت!!!!!! :لبخند: چرا بیچاره را پاک کردید، شدیداً کار داشتم و گفتم بعداً جواب کامل را میدهم و چون آن پست فوق العاده جالب را دیدم گفتم جوابی بدهم!

و اما جواب سوال!
همانطور که کاربر arsp_2004 اشاره کردند، کد ایشان با کمی تغییر قابل استفاده است ولی من دیشب و سر فرصت مطالب زیر را نوشتم.
---------------------------------------------------------
من واقعاً مثل این آدمک شدم :عصبانی++: ، و فکر کنم تا چند وقت به سلمانی رفتن نیازی نداشته باشم.
اگر صرفاً کپی ای از فایلهای متعدد دارید و میخواهید بفهمید که آیا هر دو فایل کاملاً یکسان هستند میتوانید از کد زیر استفاده کنید.
(کر زیر اطلاعات را بلاک بلاک خوانده و مقایسه میکند و فایل هرچه قدرهم که بزرگ باشد توفیقی نمیکند!)


Public Shared Function FileCompare(ByVal filepath1 As String, ByVal filepath2 As String) As Boolean
Const BUFFERSIZE As Integer = 256 * 1024
Dim buffer1(BUFFERSIZE - 1) As Byte
Dim buffer2(BUFFERSIZE - 1) As Byte
Dim iReaded As Integer, i As Integer
'--------------------------------------------------
Try
Using fs1 As New System.IO.FileStream(filepath1, System.IO.FileMode.Open, System.IO.FileAccess.Read)
Using fs2 As New System.IO.FileStream(filepath2, System.IO.FileMode.Open, System.IO.FileAccess.Read)
If fs1.Length <> fs2.Length Then Return False

iReaded = fs1.Read(buffer1, 0, BUFFERSIZE)
If iReaded <> fs2.Read(buffer2, 0, BUFFERSIZE) Then Return False

Do While iReaded > 0
For i = 0 To iReaded - 1
If buffer1(i) <> buffer2(i) Then Return False
Next

iReaded = fs1.Read(buffer1, 0, BUFFERSIZE)
If iReaded <> fs2.Read(buffer2, 0, BUFFERSIZE) Then Return False
Loop
Return True
End Using
End Using
Catch ex As Exception
Return False
End Try
End Function

ولی در هیچ حالتی نیاز به تبدیلی که گفتید نیست، من در پست اولم هم گفتم جمله شما ایهام دارد و تبدیل wav به hex زیاد درست نیست و رفع ابهام کنید! تمامی فایلها در ذات به حالت باینری و هگزادیسمال نگه داری میشوند و تبدیل معنی ندارد. باز اگر میگفتید که میخواهید یک فایل wav را به حالت hex نمایش دهید، یک چیزی میشد (که دوستان و اساتید هم جواب همین سوال را داده اند).

در کل (خیلی، خیلی، خیلی ....) میبخشید ولی من گمامن میکنم که شما اصلاً برنامه نویس نیستید و صرفاً یک سری فایل wav دارید که در زمان های مختلف از آنها کپی گرفته اید و حال میخواهید آنها را به یک فولدر غیر تکراری تبدیل کنید!

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

بهرهال کدی که من دادم (یا کد کاربر arsp_2004 با کمی تغییر) و این برنامه ها فقط میتوانند در صورتی فایلهای برابر را تشخیص دهند که فایلها حاصل کپی از هم باشند و شاید دو فایل را نابرابر تشخیص دهند چون یکی 2 پانیه بیش از دیگری زمان پخش دارد و یا شاید هردو به گوش انسان یکی باشند ولی این کدها آنها را متفاوت تشخیص میدهند. (فقط اگر کپی شده از روی هم باشند برابر تشخیص داده میشوند.)