首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >搜索PHP函数的等价物

搜索PHP函数的等价物
EN

Stack Overflow用户
提问于 2012-05-30 04:31:26
回答 2查看 183关注 0票数 1

我在将Integer转换为字符串格式时遇到了一些问题。我得到了这些PHP函数,这正是我在C#中需要的:

代码语言:javascript
运行
复制
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;
}

他们是这样叫的:

代码语言:javascript
运行
复制
$total_length = hex2str(_hex(strlen($content)));

在C#中,我尝试了这样做:

代码语言:javascript
运行
复制
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

你好,莫里茨

EN

回答 2

Stack Overflow用户

发布于 2012-05-30 05:09:37

根据您的示例代码,值34/39是输出字节的正确格式的十六进制数字,所以我不确定您是如何得出00/3C的。

但是,要在C#中将数值转换为十六进制字符串,请使用;

代码语言:javascript
运行
复制
string hex = String.Format("{0:X}", number);

或者在你更具体的情况下;

代码语言:javascript
运行
复制
StringBuilder sb = new StringBuilder();
foreach (byte b in TotalLength)
{
    sb.Append(String.Format("\x{0:X}", b));
}
string hex = sb.ToString();
票数 1
EN

Stack Overflow用户

发布于 2012-05-30 05:13:21

您的代码返回转换为字符串的l值的ASCII值(ASCII34/39是49 -字符串的长度)。但是您需要的是长度值的byte[]表示。

更改线路

代码语言:javascript
运行
复制
byte[] TotalLength = Encoding.GetEncoding(28591).GetBytes(l.ToString());

代码语言:javascript
运行
复制
byte[] TotalLength = BitConverter.GetBytes(l);

请注意,在英特尔CPU上,值15会转换为0F-00,而不是00-0F。高字节在前。在将字节数组转换为字符串时,必须注意这一点。

要将字节值转换为十六进制字符串,请使用

代码语言:javascript
运行
复制
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();

附注:局部变量应该以小写字符开头。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10806293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档