在写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[]的转换帮助类相关推荐

  1. java中string与byte[]的转换

    1.string 转 byte[] byte[] midbytes=isoString.getBytes("UTF8"); //为UTF8编码 byte[] isoret = sr ...

  2. c#中如何将byte数组转换成string从而在textbox中显示出来?

    c# string和byte[]的转换(2008-07-16 16:48:26)标签:c string byte[] it   分类:小鱼的工作 正好用到,总结一下: 1. byte[] byteAr ...

  3. Java中String和byte[]间的转换浅析

    Java语言中字符串类型和字节数组类型相互之间的转换经常发生,网上的分析及代码也比较多,本文将分析总结常规的byte[]和String间的转换以及十六进制String和byte[]间相互转换的原理及实 ...

  4. Java中String与Byte之间的各种转换

    这个是很常用的,一直没整理,现在来整理下,供自己备用. 1.一个字符串,用Byte数组形式通过串口发送出去,很简单 String cmd = "xxxx"; byte[] cmdB ...

  5. java int byte数组_Java 中int与byte数组转换详解

    1.与运算符的理解(&): 参加运算的两个数据,按二进位进行"与"运算.如果两个相应的二进位都为1,则该位的结果值为1,否则为0.即 0&0=0:0&1=0 ...

  6. Java中String,StringBuffer都是final类

    Java中String和StringBuffer同时final类,它们的区别在哪里 ? final 表示这个类不能再被继承.String不可变是说String中用一个final 的char数组priv ...

  7. C#中String与byte[]的相互转换

    从文件中读取字符串 string filePath = @"C:\Temp.xml"; string xmlString= File.ReadAllText(filePath); ...

  8. java中String转byte 编码格式

    在.Net中,字符串转换byte编码格式如下: StringBuilder str = new StringBuilder(); str.Append("妙生活"); var co ...

  9. python中uppercase是什么意思_python判断大小写并转换_python中string模块相关方法(大小写转换,字符串条件判断)....

    string模块主要包含关于字符串的处理函数,在这里列举经常会使用的一些函数. 在例如获取随机密码等之类的题时可能会用到这类函数 1.string.ascii_letters 获取所有ascii码中字 ...

最新文章

  1. python3 异步 asyncio aiohttp aiohttp-requests aiofiles 使用
  2. 深度学习的三种硬件方案:ASIC,FPGA,GPU;你更看好?
  3. pacman 查询_linux pacman常用命令
  4. CounterField属性
  5. winform把所有dll打包成一个exe
  6. Codeforces 338 D. GCD Table
  7. disperse函数 C语言,武汉工业学院电气1006班C语言测试题.doc
  8. NTFS MFT元文件碎片分析
  9. (67)SPI外设驱动接收驱动(六)(第14天)
  10. 趋势科技企业级杀软产品俩 0day 已遭利用
  11. 通过计算机名访问linux
  12. html如何与js链接,链接index.html client.js和server.js
  13. 三次样条插值之三对角矩阵算法
  14. jQuery的实用特性扩展类库:jQuery++
  15. 20180124现货黄金复盘
  16. star法则开发简历模板_软件开发的第一法则
  17. 低成本3X3拼接方案
  18. 微信 Android 视频编码爬过的那些坑
  19. 从代码上看鸿蒙 APP 与安卓 APP 的关系
  20. opencv:centos7中安装opencv4.3.0环境

热门文章

  1. java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...
  2. linux的翻译系统开发,Linux系统下的翻译神器——Goldendict
  3. android jni 字符串拼接,AndroidJNI
  4. 使用Python和OpenCV捕获鼠标事件,并裁剪图像
  5. Java h265视频抽帧提取照片支持Window,Linux
  6. Java8 新的 try-with-resources 语句,自动资源释放
  7. LabVIEW保存、读取配置文件
  8. tensorflow object_detect 操作步骤
  9. memcpy()内存拷贝和赋值操作效率测试
  10. python深度神经网络量化_基于Python建立深度神经网络!你学会了嘛?