-> Hier kostenlos registrieren
Hallo allezusammen,
Ich möchte eine Funktion .c in ST umprogrammieren
die Funktion ist:
/* Konvertiert eine Zahl in einen Hexstring nach dem Format "%08X" mit führenden Nullen (8stellig) */
BOOL dint2hexs(unsigned long pHexstr, long lNumber)
{
char *str = (char *)pHexstr;
const char Table[16] = "0123456789ABCDEF";
unsigned int divider = 0x10000000;
unsigned int index = 0;
unsigned int digit;
strcpy(str, "00000000");
while (divider) {
digit = lNumber / divider;
lNumber = lNumber % divider;
divider /= 0x10;
str[index++] = Table[digit&0xF];
}
str[index] = '\0';
return TRUE;
ich habe keine Erfahrung in ST(habe die Bibliotheken in ST nie geschrieben).
Mein Versuch:
FUNCTION dint2hexs_
pHexstr := ADR(zsHex);
str ACCESS pHexstr; // str-Reference to UDINT
divider := 16#10000000;
index := 0;
memcpy(ADR(str), ADR('00000000'), 8);
FOR i := 0 TO 9 BY 1 DO
abTable := i + 16#30;
END_FOR
FOR i := 10 TO 15 BY 1 DO
abTable := i + 16#37;
END_FOR
WHILE (divider <> 0) DO
digit := lNumber/divider;
lNumber := lNumber MOD divider;
divider := divider / 16#10;
index := index + 1;
digit := digit AND 16#F;
digit := digit + 1;
//str[index] := abTable[digit]; // abTable - ARRAY[0..15] of USINT
//str ACCESS abTable[digit];
END_WHILE
dint2hexs_ := TRUE;
END_FUNCTION
Geht aber nicht "str[index] := abTable[digit]", da str keine Feldvariable ist.
Zweite Frage: ich habe:#define Variable2 16
unsigned char Variable 1[Variable2];
.......................................................
unsigned char Variable 8[Variable2] = {0x6c,0x8a,0x83,0x7c,0x10,0x46,0xce,0xa3,0x85,0x2c,0x9d,0x51,0xf9,0x6f,0x95,0xda};
wie kann ich es in ST deklarieren? Variable 1 einfach als 16? Variable 8?
Danke für jeden Tip
Ich möchte eine Funktion .c in ST umprogrammieren
die Funktion ist:
/* Konvertiert eine Zahl in einen Hexstring nach dem Format "%08X" mit führenden Nullen (8stellig) */
BOOL dint2hexs(unsigned long pHexstr, long lNumber)
{
char *str = (char *)pHexstr;
const char Table[16] = "0123456789ABCDEF";
unsigned int divider = 0x10000000;
unsigned int index = 0;
unsigned int digit;
strcpy(str, "00000000");
while (divider) {
digit = lNumber / divider;
lNumber = lNumber % divider;
divider /= 0x10;
str[index++] = Table[digit&0xF];
}
str[index] = '\0';
return TRUE;
ich habe keine Erfahrung in ST(habe die Bibliotheken in ST nie geschrieben).
Mein Versuch:
FUNCTION dint2hexs_
pHexstr := ADR(zsHex);
str ACCESS pHexstr; // str-Reference to UDINT
divider := 16#10000000;
index := 0;
memcpy(ADR(str), ADR('00000000'), 8);
FOR i := 0 TO 9 BY 1 DO
abTable := i + 16#30;
END_FOR
FOR i := 10 TO 15 BY 1 DO
abTable := i + 16#37;
END_FOR
WHILE (divider <> 0) DO
digit := lNumber/divider;
lNumber := lNumber MOD divider;
divider := divider / 16#10;
index := index + 1;
digit := digit AND 16#F;
digit := digit + 1;
//str[index] := abTable[digit]; // abTable - ARRAY[0..15] of USINT
//str ACCESS abTable[digit];
END_WHILE
dint2hexs_ := TRUE;
END_FUNCTION
Geht aber nicht "str[index] := abTable[digit]", da str keine Feldvariable ist.
Zweite Frage: ich habe:#define Variable2 16
unsigned char Variable 1[Variable2];
.......................................................
unsigned char Variable 8[Variable2] = {0x6c,0x8a,0x83,0x7c,0x10,0x46,0xce,0xa3,0x85,0x2c,0x9d,0x51,0xf9,0x6f,0x95,0xda};
wie kann ich es in ST deklarieren? Variable 1 einfach als 16? Variable 8?
Danke für jeden Tip
Zuletzt bearbeitet: