Hallo zusammen habe wie oben gesagt ein Problem mit der scanf_s. Ich möchte die CRC16 für eine Modbuscom berechnen. Wenn ich die Werte fest vergebe ist das auch kein Problem. Nur wenn ich sie über scanf_s einlese, bekomme ich fehler in der Berechnung. Bzw ein Array wird nicht mit Daten gefüllt. Jemand ne Idee? Anbei der Code
| 1 | #include <stdio.h> | 
| 2 | |
| 3 | // Berechnung CRC16
 | 
| 4 | // ----------------
 | 
| 5 | unsigned int CRC16(unsigned int crc, unsigned int data) | 
| 6 | {
 | 
| 7 | const unsigned int Poly16=0xA001; //Generatorpolynom | 
| 8 | unsigned int LSB, i; | 
| 9 | crc = ((crc^data) | 0xFF00) & (crc | 0x00FF); | 
| 10 | for (i=0; i<8; i++) | 
| 11 | {
 | 
| 12 | LSB=(crc & 0x0001); | 
| 13 | crc=crc/2; | 
| 14 | if (LSB) | 
| 15 | crc=crc^Poly16; | 
| 16 | }
 | 
| 17 | return(crc); | 
| 18 | }
 | 
| 19 | |
| 20 | int main() | 
| 21 | {
 | 
| 22 | |
| 23 | /*unsigned*/ char NumData; | 
| 24 | /*unsigned*/ char InputByte; | 
| 25 | /*unsigned*/ char i,data[255]/*={01,43,14,01,00}*/; // Telegrammbuffer | 
| 26 | unsigned char Crc_HByte,Crc_LByte; // | 
| 27 | unsigned int Crc; | 
| 28 | |
| 29 | /*Einlesen des Wortes Problemzone*/
 | 
| 30 | printf("Anzahl der Bytes: "); | 
| 31 | scanf_s("%d",&NumData); | 
| 32 | printf("Anzahl der Bytes = %d\n",NumData); | 
| 33 | |
| 34 | for (i=0; i<NumData;i++) | 
| 35 | {
 | 
| 36 | printf("Wert Byte:" ); | 
| 37 | scanf_s("%d",&InputByte); | 
| 38 | data[i]= InputByte; | 
| 39 | }
 | 
| 40 | printf("Wert data: %d\n %d\n %d\n %d\n %d\n" ,data[0],data[1],data[2],data[3],data[4]); | 
| 41 | |
| 42 | /*keine Probleme*/
 | 
| 43 | Crc=0xFFFF; | 
| 44 | for (i=0; i<NumData; i++) | 
| 45 | {
 | 
| 46 | Crc = CRC16 (Crc, data[i] ); | 
| 47 | }
 | 
| 48 | Crc_LByte = (Crc & 0x00FF); // Low-Byte bestimmen | 
| 49 | Crc_HByte = (Crc & 0xFF00) / 256; // High-Byte bestimmen | 
| 50 | |
| 51 | printf("LByte %d\n",Crc_LByte); | 
| 52 | printf("HByte %d\n",Crc_HByte); | 
| 53 | while (1) | 
| 54 | {;
 | 
| 55 | ;}
 | 
| 56 | }
 | 
Alles auf der Basis von Visual c++ 2005.

 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten