16进制字符和图片之间相互转换

图片和字符转换一版用在socket进行通信之间。现在我就把我写的和测试整理出来和大家分享下

1:图片转换成16进制字符

 1   FileStream fs = new FileStream(lbl_show.Text, FileMode.Open, FileAccess.Read);
 2             BinaryReader br = new BinaryReader(fs);
 3             StreamWriter sw = new StreamWriter(tb_position.Text);
 4             int length = (int)fs.Length;
 5             StringBuilder sb = new StringBuilder();
 6             while (length > 0)
 7             {
 8                 byte tempByte = br.ReadByte();
 9                 string tempStr = Convert.ToString(tempByte, 16);
10                 if (tempStr.Length <= 1)
11                 {
12                     tempStr = "0" + tempStr;
13                 }
14                 sb.Append(tempStr);
15                 length--;
16             }
17             sw.Write(sb.ToString());
18             fs.Close();
19             br.Close();
20             sw.Close();
21             MessageBox.Show("转换成功"); 

注释1:lbl_show.Text表示图片存在的位置

注释2:tb_position.Text表示字符保存位置

注释3:string tempStr = Convert.ToString(tempByte, 16); 字节转换成16进制字符串

2:16进制字符转换成图片

 1     FileStream fs = new FileStream("Imgs//test.jpg", FileMode.Create, FileAccess.Write);
 2             BinaryWriter bw = new BinaryWriter(fs);
 3             StreamReader sr = new StreamReader(lbl_text.Text);
 4             while (sr.Peek() != -1)
 5             {
 6                 string tempStr = sr.ReadToEnd();
 7                 if (tempStr.Contains("7D01") || tempStr.Contains("7D02"))
 8                 {
 9                     tempStr = tempStr.Replace("7D02", "7E");
10                     tempStr = tempStr.Replace("7D01", "7D");
11                 }
12                 int tlenth = tempStr.Length / 2;
13                 int pos = 0;
14                 string[] str = new string[tlenth];
15                 for (int i = 0; i < tlenth; i++)
16                 {
17                     str[i] = tempStr.Substring(pos, 2);
18                     pos = pos + 2;
19                     string cc = str[i];
20                     byte tempByte = Convert.ToByte(str[i], 16);
21                     bw.Write(tempByte);
22                 }
23             }
24             fs.Close();
25             bw.Close();
26             sr.Close();
27             this.pictureBox1.Image = Image.FromFile("Imgs//test.jpg");

注释1:Imgs//test.jpg 表示转换图片保存位置

注释2:lbl_text.Text表示要转换字符的位置

注释3: byte tempByte = Convert.ToByte(str[i], 16);16进制字符转成字符

运行效果

源码下载

时间: 2024-12-29 23:26:37

16进制字符和图片之间相互转换的相关文章

C# 中2,10,16进制及其ASCII码之间转化

C# 中2,10,16进制及其ASCII码之间转化             --------//C#中各种字符类型的转化,使用于串口通信------------ //字符长度的理解            string s = "我是一个2兵";            int len = s.Length;//6个字符              byte[] sarr = System.Text.Encoding.Default.GetBytes(s);            len =

C#数字、16进制字符串和字节之间互转

转自http://luohonghong.blog.163.com/blog/static/78312058201242632055642/ 如下: 1.数字和字节之间互转 int num=12345; byte[] bytes=BitConverter.GetBytes(num);//将int32转换为字节数组 num=BitConverter.ToInt32(bytes,0);//将字节数组内容再转成int32类型 2.将字符串转为16进制字符,允许中文 private string Str

MFC中如何将16进制字符转化成10进制,包括CString与char*的转换

1 CString m_str; 2 m_str="1F"; //16进制字符为1F 3 m_str = "0x"+m_str; 4 char *p= (char*)((LPCTSTR)m_str); //将CString的字符m_str转化成char*型,并赋值给指针p 5 char *str; 6 int m_Speed = (int)strtol(p, &str, 16); //十六进制转化成10进制,并赋值给整形数据m_Speed

读取16进制文件和校验图片格式的问题。 文件名后缀

概要: 前段时间,要做这样一个校验:当不符合要求的文件,通过修改文件后缀名后,仍然不允许上传. 我想这是大家经常会遇到的一个校验问题.我才用的办法是:用16进制读取文件头部(不妨成为head),比较head和常见文件头部16进制编码,进行判断. 我个人认为,这个校验方法有弊端,例如当两中不同的文件的文件头编码一样时,一种符合上传要求,一种不符合上传要求,起不到校验功能,例如office 2007和zip. 但是这个方法还是很实用的,毕竟文件头一样的不同文件总是不多的,而且在网站上传是碰到的就更少

js 16进制Unicode编码与中文相互转换

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <script language=javascript> function utf8to16(str) { var out, i, len, c; var char2, char3; out = &quo

C# 16进制与字符串、字节数组之间的转换

1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, 2)); //十进制转八进制 Console.WriteLine("十进制166的八进制表示: "+Convert.ToString(166, 8)); //十进制转十六进制 Console.WriteLine("十进制166的十六进制表示: "+Con

C# 16进制与字符串、字节数组之间的转换(转)

1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串   //十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, 2)); //十进制转八进制 Console.WriteLine("十进制166的八进制表示: "+Convert.ToString(166, 8)); //十进制转十六进制 Console.WriteLine("十进制166的十六进制表示: "+C

C#串口通讯,16进制与字符串、字节数组之间的转换。

1.将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, 2));//十进制转八进制Console.WriteLine("十进制166的八进制表示: "+Convert.ToString(166, 8));//十进制转十六进制Console.WriteLine("十进制166的十六进制表示: "+Convert.ToStrin

C# 字符与16进制转换

一个字节包含8个二进制位,一个十六进制可表示4个二进制位,所以,一个字节可以由2个十六进制表示 总结如下: (1)一个byte 对应两位十六进制位,而不是八位(32位二进制位): (2)转化为十六进制之后,不足两位的,高位要补零. 8位十六进制数占多少字节 比如0x12345678这是多少字节? 一位十六进制代表四位二进制,0x12345678转换成二进制就是0001-0010-0011-0100-0101-0110-0111- 1000而没八位二进制占一个字节,所以你 8位十六进制数占4字节