gpt4 book ai didi

c# - Bitwise Shift - 在 C# 中获得与在 PHP 中不同的结果

转载 作者:太空宇宙 更新时间:2023-11-03 11:16:38 25 4
gpt4 key购买 nike

我正在尝试将一些 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;
}

other question这里适用于较大的值,但不适用于较小的值。我想知道问题是什么。

对不起。昨天有点晚了。

bytes from the server

用下面的函数转换后的输入 = " ̄ϸ㠁锂Ǹϸ붻ª₩";

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 中函数的使用。

最佳答案

不要将字符串等同于字节数组。字符编码会干扰和破坏数据(如果它实际上不是文本)。如果您必须将原始数据作为文本传输,则必须对其进行适当的编码/解码,例如使用 base64 编码。

关于c# - Bitwise Shift - 在 C# 中获得与在 PHP 中不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12485416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com