zoukankan
html css js c++ java
[收藏]C#中string与byte[]的转换帮助类.NET教程,C#语言
在写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是 31
///
asc: ascii
///
uni: unicode
///
</summary>
public
sealed
class
strhelper
{
hex与hexbin的转换
#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
}
}
查看全文
相关阅读:
【数据库开发】数据库连接池及其工作原理
【数据库开发】在Windows上利用C++开发MySQL的初步
【数据库开发】is not allowed to connect to this MySQL server解决办法
【数据库开发】 C连接mysql——常用的函数
【数据库开发】在Windows上和Linux上配置MySQL的过程
【数据库开发】在Windows上和Linux上配置MySQL的过程
【数据库开发】MySQL命令大全
【数据库开发】MySQL命令大全
【数据库开发】MySQL修改root密码
【数据库开发】MySQL修改root密码
原文地址:https://www.cnblogs.com/goody9807/p/773728.html
最新文章
【ARM-Linux开发】TI AM437x调试WEB CAM
【ARM-Linux开发】DRM学习(一)
【ARM-Linux开发】DRM学习(一)
【ARM-Linux开发】嵌入式操作系统上的小型数据库移植SQLite
【ARM-Linux开发】嵌入式操作系统上的小型数据库移植SQLite
【ARM-Linux开发】【QT开发】Couldnt load module input, no modules loaded
【ARM-Linux开发】【QT开发】Couldnt load module input, no modules loaded
【VS开发】fatal error C1001:编译器中发生内部错误
【VS开发】fatal error C1001:编译器中发生内部错误
【计算机视觉】纹理特征之LBP局部二值化模式
热门文章
【计算机视觉】纹理特征之LBP局部二值化模式
【miscellaneous】视频浓缩摘要简介
【miscellaneous】视频浓缩摘要简介
【数据库开发】学习Redis从这里开始
【数据库开发】学习Redis从这里开始
【数据库开发】Redis key-value内存数据库介绍
【数据库开发】Redis key-value内存数据库介绍
【数据库开发】如何创建MySQL数据库连接池(一个基于libmysql的MySQL数据库连接池示例(C/C++版))
【数据库开发】如何创建MySQL数据库连接池(一个基于libmysql的MySQL数据库连接池示例(C/C++版))
【数据库开发】数据库连接池及其工作原理
Copyright © 2011-2022 走看看