C#中string与byte[]的转换帮助类
在写C#程序时,string和byte[]之间的转换比较烦,在移植一些老程序时感觉很不好。我在C#中使用DES和TripleDES时移植一块老代码时也遇到了同样的情况。为了下次不为同样的事情烦恼,就写了下面的帮助类。
主要实现了以下的函数
代码中出现的Sidle是我的网名。
/*
* @Author WuErPing
* @Version 1.0
* @Date 2004/11/30
* @Description:
*/
using System;
using System.Text;
namespace SidleHelper
{
/// <summary>
/// Summary description for StrHelper.
/// 命名缩写:
/// Str: unicode string
/// Arr: unicode array
/// Hex: 二进制数据
/// Hexbin: 二进制数据用ASCII字符表示 例 字符'1'的hex是0x31表示为hexbin是 '3''1'
/// Asc: ASCII
/// Uni: UNICODE
/// </summary>
public sealed class StrHelper
{
#region Hex与Hexbin的转换
public static void Hexbin2Hex(byte[] bHexbin, byte[] bHex, int nLen)
{
for(int i=0; i<nLen/2; i++)
{
if(bHexbin[2*i] <0x41)
{
bHex[i] = Convert.ToByte(((bHexbin[2*i] - 0x30)<<4) & 0xf0);
}
else
{
bHex[i] = Convert.ToByte(((bHexbin[2*i] - 0x37)<<4) & 0xf0);
}
if(bHexbin[2*i+1] <0x41)
{
bHex[i] |= Convert.ToByte((bHexbin[2*i+1] - 0x30) & 0x0f);
}
else
{
bHex[i] |= Convert.ToByte((bHexbin[2*i+1] - 0x37) & 0x0f);
}
}
}
public static byte[] Hexbin2Hex(byte[] bHexbin, int nLen)
{
if(nLen%2 !=0)
return null;
byte[] bHex = new byte[nLen/2];
Hexbin2Hex(bHexbin, bHex, nLen);
return bHex;
}
public static void Hex2Hexbin(byte[] bHex, byte[] bHexbin, int nLen)
{
byte c;
for(int i=0;i<nLen;i++)
{
c = Convert.ToByte((bHex[i]>>4) & 0x0f);
if(c < 0x0a)
{
bHexbin[2*i] = Convert.ToByte(c + 0x30);
}
else
{
bHexbin[2*i] = Convert.ToByte(c + 0x37);
}
c = Convert.ToByte(bHex[i]&0x0f);
if(c < 0x0a)
{
bHexbin[2*i+1] = Convert.ToByte(c + 0x30);
}
else
{
bHexbin[2*i+1] = Convert.ToByte(c + 0x37);
}
}
}
public static byte[] Hex2Hexbin(byte[] bHex, int nLen)
{
byte[] bHexbin = new byte[nLen*2];
Hex2Hexbin(bHex, bHexbin, nLen);
return bHexbin;
}
#endregion
#region 数组和字符串之间的转化
public static byte[] Str2Arr(String s)
{
return (new UnicodeEncoding()).GetBytes(s);
}
public static string Arr2Str(byte[] buffer)
{
return (new UnicodeEncoding()).GetString(buffer, 0, buffer.Length);
}
public static byte[] Str2AscArr(String s)
{
return System.Text.UnicodeEncoding.Convert(System.Text.Encoding.Unicode,
System.Text.Encoding.ASCII,
Str2Arr(s));
}
public static byte[] Str2HexAscArr(String s)
{
byte[] hex = Str2AscArr(s);
byte[] hexbin = Hex2Hexbin(hex, hex.Length);
return hexbin;
}
public static string AscArr2Str(byte[] b)
{
return System.Text.UnicodeEncoding.Unicode.GetString(
System.Text.ASCIIEncoding.Convert(System.Text.Encoding.ASCII,
System.Text.Encoding.Unicode,
b)
);
}
public static string HexAscArr2Str(byte[] buffer)
{
byte[] b = Hex2Hexbin(buffer, buffer.Length);
return AscArr2Str(b);
}
#endregion
}
}
C#中string与byte[]的转换帮助类相关推荐
- java中string与byte[]的转换
1.string 转 byte[] byte[] midbytes=isoString.getBytes("UTF8"); //为UTF8编码 byte[] isoret = sr ...
- c#中如何将byte数组转换成string从而在textbox中显示出来?
c# string和byte[]的转换(2008-07-16 16:48:26)标签:c string byte[] it 分类:小鱼的工作 正好用到,总结一下: 1. byte[] byteAr ...
- Java中String和byte[]间的转换浅析
Java语言中字符串类型和字节数组类型相互之间的转换经常发生,网上的分析及代码也比较多,本文将分析总结常规的byte[]和String间的转换以及十六进制String和byte[]间相互转换的原理及实 ...
- Java中String与Byte之间的各种转换
这个是很常用的,一直没整理,现在来整理下,供自己备用. 1.一个字符串,用Byte数组形式通过串口发送出去,很简单 String cmd = "xxxx"; byte[] cmdB ...
- java int byte数组_Java 中int与byte数组转换详解
1.与运算符的理解(&): 参加运算的两个数据,按二进位进行"与"运算.如果两个相应的二进位都为1,则该位的结果值为1,否则为0.即 0&0=0:0&1=0 ...
- Java中String,StringBuffer都是final类
Java中String和StringBuffer同时final类,它们的区别在哪里 ? final 表示这个类不能再被继承.String不可变是说String中用一个final 的char数组priv ...
- C#中String与byte[]的相互转换
从文件中读取字符串 string filePath = @"C:\Temp.xml"; string xmlString= File.ReadAllText(filePath); ...
- java中String转byte 编码格式
在.Net中,字符串转换byte编码格式如下: StringBuilder str = new StringBuilder(); str.Append("妙生活"); var co ...
- python中uppercase是什么意思_python判断大小写并转换_python中string模块相关方法(大小写转换,字符串条件判断)....
string模块主要包含关于字符串的处理函数,在这里列举经常会使用的一些函数. 在例如获取随机密码等之类的题时可能会用到这类函数 1.string.ascii_letters 获取所有ascii码中字 ...
最新文章
- python3 异步 asyncio aiohttp aiohttp-requests aiofiles 使用
- 深度学习的三种硬件方案:ASIC,FPGA,GPU;你更看好?
- pacman 查询_linux pacman常用命令
- CounterField属性
- winform把所有dll打包成一个exe
- Codeforces 338 D. GCD Table
- disperse函数 C语言,武汉工业学院电气1006班C语言测试题.doc
- NTFS MFT元文件碎片分析
- (67)SPI外设驱动接收驱动(六)(第14天)
- 趋势科技企业级杀软产品俩 0day 已遭利用
- 通过计算机名访问linux
- html如何与js链接,链接index.html client.js和server.js
- 三次样条插值之三对角矩阵算法
- jQuery的实用特性扩展类库:jQuery++
- 20180124现货黄金复盘
- star法则开发简历模板_软件开发的第一法则
- 低成本3X3拼接方案
- 微信 Android 视频编码爬过的那些坑
- 从代码上看鸿蒙 APP 与安卓 APP 的关系
- opencv:centos7中安装opencv4.3.0环境
热门文章
- java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...
- linux的翻译系统开发,Linux系统下的翻译神器——Goldendict
- android jni 字符串拼接,AndroidJNI
- 使用Python和OpenCV捕获鼠标事件,并裁剪图像
- Java h265视频抽帧提取照片支持Window,Linux
- Java8 新的 try-with-resources 语句,自动资源释放
- LabVIEW保存、读取配置文件
- tensorflow object_detect 操作步骤
- memcpy()内存拷贝和赋值操作效率测试
- python深度神经网络量化_基于Python建立深度神经网络!你学会了嘛?