|
First of all you must figure out whether the bytes on the cable represent binary
data or textual data. From what you have shown, it seems binary (FF is not
a regular ASCII/ANSI character).
If you want to see it as textual data, you must use the encoding/decoding that
matches the data; only then can you successfully apply the methods ReadChar,
ReadLine, Read(char[]) and the like. The default encoding for SerialPort is ASCII,
which would fail to understand a byte value of FF. See SerialPort.Encoding property.
If you want to capture it as binary data (which implies no interpretation whatsoever)
you should use ReadByte or Read(byte[]). The read will always succeed. But you
would still have to decide how exactly you will deal with the bytes that you have
got; you can be sure though they are identical to what has been received from
the cable.
|
|
|
|
|
Hello..
Thanks for the help.. It is no working..
<br />
if (ComPort.BytesToRead >= 1){<br />
int bytes = ComPort.BytesToRead;<br />
byte[] buffer = new byte[bytes];<br />
ComPort.Read(buffer, 0, bytes);<br />
string hex = ByteArrayToHexString(buffer);<br />
if (hex.Length >= 48) {<br />
Console.WriteLine(hex);<br />
Console.WriteLine(HexStringToCharString(hex));<br />
Console.WriteLine(Convert.ToInt32(ConvertCharToByte(HexStringToCharString(hex).Substring(4, 1)), 16));<br />
}<br />
<br />
}<br />
<br />
<br />
<br />
public string ConvertCharToByte(string asciiString)<br />
{<br />
string hex = "";<br />
foreach (char c in asciiString)<br />
{<br />
int tmp = c;<br />
hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString()));<br />
}<br />
return hex;<br />
}<br />
<br />
private string HexStringToCharString(string s)<br />
{<br />
StringBuilder sb = new StringBuilder(s.Length / 3);<br />
for (int i = 0; i < s.Length; i += 3)<br />
{<br />
sb.Append(Convert.ToString((char)ushort.Parse(s.Substring(i, 2), System.Globalization.NumberStyles.HexNumber)));<br />
}<br />
return sb.ToString();<br />
}<br />
<br />
private byte[] HexStringToByteArray(string s)<br />
{<br />
s = s.Replace(" ", "");<br />
byte[] buffer = new byte[s.Length / 2];<br />
for (int i = 0; i < s.Length; i += 2)<br />
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);<br />
return buffer;<br />
}<br />
<br />
private string ByteArrayToHexString(byte[] data)<br />
{<br />
StringBuilder sb = new StringBuilder(data.Length * 3);<br />
foreach (byte b in data)<br />
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));<br />
return sb.ToString().ToUpper();<br />
}<br />
|
|
|
|
|
I'm trying to create some linq expression manually.
At some stage I want to create an expression to concatenate 2 strings, I'm trying the following code:
using System.Linq.Expressions;
Expression e1, e2;
return Expression.Call(typeof(string), "Concat", new Type[] { typeof(string), typeof(string) }, e1, e2);
this call yield the following error:
System.InvaldOperationExpression
No method 'Concat' on type 'System.String' is compatible with the supplied arguments.
Well, well, I'm somewhat surprised...
what else could I try?
|
|
|
|
|
well, not sure in which forum this question fits.
is there any way or any tool which allows crystal reports to be converted to RDL file,
there are few website which claim to do that, but they provide the services and charge arround $25 per report etc..
Is this the last way i should do it,
i can redesign the entire thing (all reports) but sounds like lot of hectic work to me,
regards,
|
|
|
|
|
It's just converting from one file format to another. The trick is knowing the syntax of both and getting all the nuianses correct. It can be done, but it will take you longer, and cost more than $25.
only two letters away from being an asset
|
|
|
|
|
Hi,
I don't know whether this is the right place to post this query or not.I have a requirment to embadd flash player in a windows form.I am working on C# with VS2005 Version.Can anybody help me where can i get the flash player which supports FLV file formats.
Any help will be greatly appreciated.
|
|
|
|
|
|
Does anybody know how to define a treeview with checkboxes in the nodes using XAML ? The treeview is not bound to a datasource.
Johan Lombaard
Only two things are infinite, the universe and human stupidity, and I'm not sure about the former - Albert Einstein
|
|
|
|
|
I need to be able to delete a log file. However i'm getting the following error:
{System.IO.IOException: The process cannot access the file 'C:\Web_Projects\eServiceRemoteDesktop\bin\Debug\mServiceLog.log' because it is being used by another process. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.File.Delete(String path)
at eServiceRemoteDesktop.frmTimeTicketSync.tlStpBtnClearLog_Click(Object sender, EventArgs e) in C:\Web_Projects\eServiceRemoteDesktop\frmTimeTicketSync.cs:line 229}
(line 229 being the line where i'm trying to do the abovementioned delete file. The emphasis added in the snippet is by me.)
I think that the Logger class we are using does not let go of the log file. I'm not going to be able to make any changes to the logger code though. Is there any other way to make this delete happen?
Two Thumbs Up!!
Mihir Karkare
|
|
|
|
|
Hello,
Looks like your Logger class uses some kind of Stream, which doesn't get closed.
This is not good practice.
It is sometimes the case if an exception is thrown during stream write, your file stays also locked.
For this cases you could use an external program which unlocks the file (Only use it if it's really an "emergency")
http://www.chip.de/downloads/c1_downloads_18414122.html[^]
You could start this over the Process and ProcessStartInfo class of System.Diagnostics.
unlockerprocess.FileName = "unlocker.exe";
unlockerprocess.Arguments = filename + " /s /o";
All the best,
Martin
|
|
|
|
|
If you programmatically fail to delete a file, insert a Thread.Sleep(5000);
just before your File.Delete().
If that helps, ask and I will repeat the explanation upon your request.
|
|
|
|
|
Ill try that.
Anyway it turns out i may not have to delete hat file any way. But ill try doing this. Im curios to know why this works though.
Two Thumbs Up!!
Mihir Karkare
|
|
|
|
|
My dear you want to delete such a file that is already in use by any other process.
First of all you should check which process using your desire file.
For check the process you can use unlocker softwares.
The second reason that i guess you have did that thing. That is you open the stream and did not close the stream.
You should check your code that you create the file you must close the stream before using the the file by any other function.
If you did't solve the problem then contact me personally
nidostyle@gmail.com
|
|
|
|
|
Hey thanks for helping but the requirement has changed. Turns out i dont have to delete the file anyway.
Thanks for benig so helpful.
Two Thumbs Up!!
Mihir Karkare
|
|
|
|
|
You first need to stop the service which is using this log file and then delete the log and restart the service.
You can stop and restart the service using WMI approach.
i can write down the code for you if you want, its quite simple.
SS
|
|
|
|
|
Thank you so much. But turns out i dont have to perform that deletion anyway. If you could, please share the code anyway!
thanks
Two Thumbs Up!!
Mihir Karkare
|
|
|
|
|
Hello,
what is the easiest way to make two separate compiled apps exchange data through shared memory pipeline or something like that?
Thanks much,
Michal
|
|
|
|
|
An easy way is using Socket class; you may need to explain to your FireWall it
should trust that tho.
Other ways:
- Windows messaging
- a memory mapped file
- a named pipe
- WM_COPYDATA
and there may be others.
I most often use a named pipe, which takes more code, but avoids all hassles
with firewalls.
|
|
|
|
|
Remoting[^] is the official way to do it for both interprocess and intermachine.
|
|
|
|
|
Thanks both for your ideas.
I'm going to look into all of the above concepts.
I thought that remoting is just a way to facilitate communication over network.
Thanks again,
Michal
|
|
|
|
|
Remoting is also used internally in applications that create and use multiple app domains.
only two letters away from being an asset
|
|
|
|
|
Yep, in .Net 2 theres a new IPC channel specificly for interprocess communication. It's pretty cool in the fact that you can use configuration file to change the channel used so if you want to switch from interprocess to intermachine for some reason you can easily do it
|
|
|
|
|
Dear Listeners !
I had a gui application that included a dll that raises Windows Messages whenever a remote unit communicates with him through UDP.
This woked great until I changed the application to a windows service , I do not know why but I do not receive the windows messages in my windows service although I check the interface with desktop flag.
Does any body know is it possible to use the WND_Proc function in a windows service and receive messages form that dll.
Thank you very much
Zvika Tubis
|
|
|
|
|
I am pretty sure that windows services are not on the message loop. They have no visible UI so most of the windows messages wouldn't work for them anyway. So I am not 100% sure, but I am pretty sure it won't work with a windows service.
Ben
|
|
|
|
|
That's because there's no message pump in a Windows Service. No windows, no pump. No pump, no way to receive window messages and process them.
|
|
|
|