Laden...

Wie kann ich HEX in Form "0xFF" in Viererfolge abbilden?

Erstellt von spike1302 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.387 Views
S
spike1302 Themenstarter:in
17 Beiträge seit 2011
vor 6 Jahren
Wie kann ich HEX in Form "0xFF" in Viererfolge abbilden?

Hallo Community,

ich habe durch "USB IR Toy V2" eine virtuelle COM-Schnittstelle. Das ansteuern funktioniert auch.
Ich habe durch das Programm "IrScrutinizer" das Signal der Power-Taste einer Fernbedienung (Infrarot) herausbekommen.

Das Signal liegt mir in Form eines NEC Code vor bzw. in pronto hex/short pronto hex

short pronto hex:

900A 006C 0000 0001 00FF 40BF

Ich versuche nun das Signal mittels C# an die COM-Schnittstelle zu geben. Doch den Code den ich bis dato habe fordert immer den HEX in Form 0xFF (FF steht für ein beliebigen Hex-Code.

Doch ich habe oben eine vierer Folge (bsp: 900A) und keine zweierfolge.

Sprich wie bekomme ich hier die viererfolge abgebildet?

byte[] powerOnCmd = new byte[] { 0xFF, 0x01, 0x00 };

Und nun?

Anbei mein Code. Ich hoffe ihr könnt mir helfen!


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections.Concurrent;
using System.IO.Ports;
using System.Threading;
using System.Threading.Tasks;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {


        byte[] powerOnCmd = new byte[] { 0xFF, 0x01, 0x00 };
        SerialPort sp = new SerialPort();
        

        public Form1()
        {
            InitializeComponent();


            sp.PortName = "COM3";
            sp.BaudRate = 9600;
            sp.Parity = Parity.None;
            sp.DataBits = 8;
            sp.StopBits = StopBits.One;
            sp.Open();
        }

        private void button1_Click(object sender, EventArgs e)
        {
                sp.Write(powerOnCmd, 0, powerOnCmd.Length);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            sp.Close();
            sp.Dispose();
            sp = null;
        }
    }
}

4.938 Beiträge seit 2008
vor 6 Jahren

Einfach die Bytes (d.h. jeweils 2 Hexziffern) einzeln angeben:


byte[] powerOnCmd = new byte[] { 0x90, 0x0A, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x01, 0x00, 0xFF, 0x40, 0xBF }

Falls die Darstellung in Little Endian (LE) ist, dann mußt du evtl. noch jeweils die 2 Bytes jeder Viererfolge tauschen: 900A => 0x0A, 0x90, ...

S
spike1302 Themenstarter:in
17 Beiträge seit 2011
vor 6 Jahren

Hallo,
danke.
gleich beide Varianten ausprobiert.

Leider funktioniert es nicht. (also der Code geht, doch als Ergebnis passiert nichts)
Habt ihr noch Ideen?

4.938 Beiträge seit 2008
vor 6 Jahren

So müßte es aber funktionieren. Kannst du mit dem Programm "IrScrutinizer" dann nicht nachschauen, was bei obigem Code wirklich verschickt wird?

P
441 Beiträge seit 2014
vor 6 Jahren

Das könnte ein Big-/Littleendian Problem sein.
Sprich, es könnte sein, dass du die Bytes in der anderen Reihenfolge schicken musst.