블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday
c#은 아주 느리다.
실행시간에 HEX문자열을 BIN으로 변환하는 과정은 아주 아주 아주 느리다.
그래서, 처음에 한번 변환하고, 전송시에는 변환된 BIN데이터만 전송한다.
ex)
		HexStrToBin_class data1 = new HexStrToBin_class("22 00 02 00 04"),
			data2 = new HexStrToBin_class("80 20 00 04 00 00"),
			data3= new HexStrToBin_class("30 80 20 00 00 00 CD");
		void some_func()
		{
			WRITE232("data1", data1.buf, data1.len);
			WRITE232("data2", data2.buf, data2.len);
			WRITE232("data3", data3.buf, data3.len);
		}




public class HexStrToBin_class
{
	public string HexStr;
	public byte[] buf;
	public int len;
	public HexStrToBin_class(string hex_str)
	{
		byte[] a=new byte[1024*8];
		HexStr = hex_str;
		len =G.HEX_str_to_Bin(hex_str, ref a);
		buf = G.Memdup(ref a, len);
	}
}

static public class G
{
	static public void Memcpy(ref byte[] dst,ref byte[] src,int len)
	{
		Buffer.BlockCopy(src, 0, dst, 0, len);
	}
	static public byte[] Memdup(ref byte[] data, int len)
	{
		byte[] ret = new byte[len];
		G.Memcpy(ref ret, ref data, len);
		return ret;
	}
    static public byte Hex2Binary(char a)
	{
		byte ret = 0;
		if (('0'<=a)&& (a<='9'))
		{
			ret = (byte)(a - '0');
		}
		else if(('A'<=a)&&(a<='Z'))
		{
			ret = (byte)(a - 'A'+10);
		}
		else if (('a' <= a) && (a <= 'z'))
		{
			ret = (byte)(a - 'a' + 10);
		}
		else
		{
			//err
		}
		return ret;
	}
    static public int HEX_str_to_Bin(string s, ref byte[] buf)//3자리이상의 홀수 자릿수의 연속하는 HEX문자열이 없어야한다.
	{
		int len = 0;
		int i, n, cnt = 0;
		char a;
		byte c = 0;

		i = 0;
		n = s.Length;
		while (i < n)
		{
			a = s[i];
			if (a == ';')
			{
				//주석문
				break;
			}
			else if ((a == ' ') || (a == '\t') || (a == '\r') || (a == '\n'))
			{
				//skip
				//reset
				cnt = 0;
				c = 0;
			}
			else
			{
				//1byte HEX문자(최대 2문자)를 바이너리로 변환
				c = (byte)((c << 4) | Hex2Binary(a));
				cnt++;
				if (cnt >= 2)
				{
					buf[len] = c;
					len++;
					//reset
					cnt = 0;
					c = 0;
				}
				else
				{

				}
			}
			i++;
		}
		if (cnt > 0)
		{
			buf[len] = c;
			len++;
		}
		else
		{
		}
		return len;
	}
}
Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함