我在将Integer转换为字符串格式时遇到了一些问题。我得到了这些PHP函数,这正是我在C#中需要的:
function _hex($int)
{
return (strlen(sprintf("%X", $int)) % 2 == 0) ? sprintf("%X", $int) : sprintf("0%X", $int);
}
Function hex2str($hexstr)
{
$hexstr = str_replace(' ', '', $hexstr);
$hexstr = str_replace('\x', '', $hexstr);
$retstr = pack('H*', $hexstr);
return $retstr;
}他们是这样叫的:
$total_length = hex2str(_hex(strlen($content)));在C#中,我尝试了这样做:
String test = "1234567890123456789012345678901234567890123456789";
short l = (short)test.Length;
byte[] TotalLength = Encoding.GetEncoding(28591).GetBytes(l.ToString());PHPs HexDump的结果是00 3C - In C# I get 34 39
我希望结果是以下格式的字符串:
\x00\x3c
你好,莫里茨
发布于 2012-05-30 05:09:37
根据您的示例代码,值34/39是输出字节的正确格式的十六进制数字,所以我不确定您是如何得出00/3C的。
但是,要在C#中将数值转换为十六进制字符串,请使用;
string hex = String.Format("{0:X}", number);或者在你更具体的情况下;
StringBuilder sb = new StringBuilder();
foreach (byte b in TotalLength)
{
sb.Append(String.Format("\x{0:X}", b));
}
string hex = sb.ToString();发布于 2012-05-30 05:13:21
您的代码返回转换为字符串的l值的ASCII值(ASCII34/39是49 -字符串的长度)。但是您需要的是长度值的byte[]表示。
更改线路
byte[] TotalLength = Encoding.GetEncoding(28591).GetBytes(l.ToString());至
byte[] TotalLength = BitConverter.GetBytes(l);请注意,在英特尔CPU上,值15会转换为0F-00,而不是00-0F。高字节在前。在将字节数组转换为字符串时,必须注意这一点。
要将字节值转换为十六进制字符串,请使用
var sb = new StringBuilder();
for (int i = TotalLength.Length - 1; i >= 0; i--)
{
sb.Append("\\x");
sb.Append(TotalLength[i].ToString("x2"));
}
string hex = sb.ToString();附注:局部变量应该以小写字符开头。
https://stackoverflow.com/questions/10806293
复制相似问题