stringとbyte[]の変換(C#)
13978 ワード
stringタイプからbyte[]:
逆にbyte[]はstringに変わります.
他の符号化方式、例えばSystem.Text.UTF8Encoding,System.Text.UnicodeEncoding classなど;例:
stringタイプからASCII byte[]:(「01」からbyte[]=new byte[]{0 x 30,0 x 31})へ
ASCII byte[]からstringへ:(byte[]=new byte[]{0 x 30,0 x 31}から「01」へ)
時々このようなニーズがあります.
byte[]は、0 xae 00 cfなどの元の16進数フォーマットのstringに変換され、「ae 00 cf」に変換される.new byte[]{0 x 30,0 x 31}を「3031」に変換:
逆に、16進数フォーマットのstringはbyte[]に変換され、例えば、「ae 00 cf」は0 xae 00 cfに変換され、長さは半分に縮小される.「3031」からnew byte[]{0 x 30,0 x 31}:
16進String回転byte[]:
from: http://www.cnblogs.com/Mainz/archive/2008/04/09/String_Byte_Array_Convert_CSharp.html
byte
[] byteArray
=
System.Text.Encoding.Default.GetBytes ( str );
逆にbyte[]はstringに変わります.
string
str
=
System.Text.Encoding.Default.GetString ( byteArray );
他の符号化方式、例えばSystem.Text.UTF8Encoding,System.Text.UnicodeEncoding classなど;例:
stringタイプからASCII byte[]:(「01」からbyte[]=new byte[]{0 x 30,0 x 31})へ
byte
[] byteArray
=
System.Text.Encoding.ASCII.GetBytes ( str );
ASCII byte[]からstringへ:(byte[]=new byte[]{0 x 30,0 x 31}から「01」へ)
string
str
=
System.Text.Encoding.ASCII.GetString ( byteArray );
時々このようなニーズがあります.
byte[]は、0 xae 00 cfなどの元の16進数フォーマットのstringに変換され、「ae 00 cf」に変換される.new byte[]{0 x 30,0 x 31}を「3031」に変換:
public
static
string
ToHexString (
byte
[] bytes )
//
0xae00cf => "AE00CF "
{
string
hexString
=
string
.Empty;
if
( bytes
!=
null
)
{
StringBuilder strB
=
new
StringBuilder ();
for
(
int
i
=
0
; i
<
bytes.Length; i
++
)
{
strB.Append ( bytes[i].ToString (
"
X2
"
) );
}
hexString
=
strB.ToString ();
}
return
hexString;
}
逆に、16進数フォーマットのstringはbyte[]に変換され、例えば、「ae 00 cf」は0 xae 00 cfに変換され、長さは半分に縮小される.「3031」からnew byte[]{0 x 30,0 x 31}:
public
static
byte
[] GetBytes(
string
hexString,
out
int
discarded)
{
discarded
=
0
;
string
newString
=
""
;
char
c;
//
remove all none A-F, 0-9, characters
for
(
int
i
=
0
; i
<
hexString.Length; i
++
)
{
c
=
hexString[i];
if
(IsHexDigit(c))
newString
+=
c;
else
discarded
++
;
}
//
if odd number of characters, discard last character
if
(newString.Length
%
2
!=
0
)
{
discarded
++
;
newString
=
newString.Substring(
0
, newString.Length
-
1
);
}
int
byteLength
=
newString.Length
/
2
;
byte
[] bytes
=
new
byte
[byteLength];
string
hex;
int
j
=
0
;
for
(
int
i
=
0
; i
<
bytes.Length; i
++
)
{
hex
=
new
String(
new
Char[] {newString[j], newString[j
+
1
]});
bytes[i]
=
HexToByte(hex);
j
=
j
+
2
;
}
return
bytes;
}
16進String回転byte[]:
private
static
byte
[] HexToByte(
string
hexString)
{
byte
[] returnBytes
=
new
byte
[hexString.Length
/
2
];
for
(
int
i
=
0
; i
<
returnBytes.Length; i
++
)
returnBytes[i]
=
Convert.ToByte(hexString.Substring(i
*
2
,
2
),
16
);
return
returnBytes;
}
from: http://www.cnblogs.com/Mainz/archive/2008/04/09/String_Byte_Array_Convert_CSharp.html