Hex mit Präfix

Hallo,

hab da ein Problem seit der Umstellung auf eine neue PHP Version.

Funktioniert:

SendCommand(array(0x00,0xD3),array(0x52));

Funktioniert nicht:

SendCommand(array(0x00,0xD3),array("0x" . dechex($MinuteValue)));

Sobald ich den Hexwert mit Präfix zusammensetze, dann kommt eine Fehlermeldung. Hat da jemand eine Idee, wie ich einen Hexwert generiere mit 0x Präfix?

Wenn $MinuteValue ein Byte ist, dann so:


SendCommand(array(0x00,0xD3),chr($MinuteValue));

Sonst so:
PHP: pack - Manual
Michael

Das funktioniert leider nicht. Ich rufe damit einen Wert aus einem Profil ab. Beispielsweise einen Integerwert von 82. Der Wert 82 sollte dann einen Hexwert von 52 ergeben und zwar einen mit Präfix: 0x52. Wenn ich diese hardcodiere, dann funktioniert es ja auch. Nur, wenn ich die 82 zu Hex umwandle, dann entsteht ein Hexwert ohne Präfix mit dem die Folgeroutinen nicht mehr funktionieren. Den Hexwert mit präfix zusammenzusetzen aus zwei Zeichenketten funktioniert in der neusten PHP Version anscheinend nicht mehr.

Das hier ist identisch!
82 ist 0x52 in Hexadezimaler Schreibweise.
Ich habe aber das Array unterschlagen, also so:


SendCommand(array(0x00,0xD3),array($MinuteValue));

Michael

Manchmal sieht man die Bäume vor lauter Wald nicht mehr. Das hat geholfen. Manchmal geht es doch so einfach. Vielen Dank!!

Ich versuche immer noch verstehen wo der Wert in Hex umgewandelt wird.

Die verarbeitende Funktion sieht wie folgt aus:

function SendCommand($byteArr,$dataArr) {
		$request = CreateRequest($byteArr,$dataArr);
		$requestStr="";
		foreach($request as $byte) {
			$requestStr = $requestStr . chr($byte);
		}
		CSCK_SendText(33892 /*[ComfoAir Client Socket]*/, $requestStr);
		return $requestStr;
}

Das was ich nicht so richtig verstehe ist das was dort geschieht:

foreach($request as $byte) {
			$requestStr = $requestStr . chr($byte);
		}

Kann mir das jemand verständlich erklären?

Der nimmt dein Array von Bytes und macht mit chr daraus einen String.
Hex ist das alles nicht, so sondern ein String mit binären Daten.
Hexadezimal ist nur eine Darstellung, damit wir Menschen es besser lesen können.
Und z.b. 0x10 wäre als String ein Zeilenvorschub, also doof darzustellen.
Und binär als 0001 0000 jedes Byte darzustellen ist auch nicht sehr leserlich :wink:
Michael