我正在尝试将一些 PHP 转换为 C#,但按位函数给了我不同的结果。
PHP 将返回 248
protected function readInt8()
{
$ret = 0;
if (strlen($this->_input) >= 1)
{
$sbstr = substr($this->_input, 0, 1);
$ret = ord($sbstr);
$this->_input = substr($this->_input, 1);
}
return $ret;
}
C# 将返回 63
private int ReadInt8()
{
int ret = 0;
if (input.Length >= 1)
{
string substr = input.Substring(0, 1);
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] buffer = ascii.GetBytes(substr);
ret = buffer[0]; // 63
this.input = this.input.Substring(1);
}
return ret;
}
否则它将返回 14337
private int ReadInt8()
{
int ret = 0;
if (input.Length >= 1)
{
string substr = input.Substring(0, 1);
ret = (int)(substr[0]); // 14337
this.input = this.input.Substring(1);
}
return ret;
}
这里的另一个问题适用于较大的值,但不适用于较小的值。我想知道问题是什么。
对不起。昨天有点晚了。
使用以下函数转换的输入 = "Ԁϸ㠁Ǹϸ붻ȁ";
public string GetString(byte[] bytes)
{
char[] chars = new char[bytes.Length / sizeof(char)];
System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
return new string(chars);
}
关于换班。我认为它可能需要转变,因为 ReadInt16() 需要它。
private int ReadInt16()
{
int ret = 0;
if (input.Length >= 2)
{
ret = ((int)(this.input.Substring(0, 1)[0]) & 0xffff) >> 8;
ret |= ((int)(this.input.Substring(1, 1)[0]) & 0x0000) >> 0;
this.input = input.Substring(2);
}
return ret;
}
我应该说。我可能误解了 PHP 中函数的使用。