הערה
הגישה לדף זה מחייבת הרשאה. באפשרותך לנסות להיכנס או לשנות מדריכי כתובות.
הגישה לדף זה מחייבת הרשאה. באפשרותך לנסות לשנות מדריכי כתובות.
Question
Tuesday, November 12, 2013 7:33 AM
Hi All,
I want to translate the folowing code in C to VB.net.
The CRC‐8 algorithm can be implemented with the following C code: polynomial '100100101'
pass in pointer to data, number of bytes, and 0 as the initial crc value.
unsigned char calculate_crc(const unsigned char * ptr, unsigned length, unsigned char crc)
{
static const unsigned char crc_table[256] =
{
0x00, 0x25, 0x4A, 0x6F, 0x94, 0xB1, 0xDE, 0xFB,
0x0D, 0x28, 0x47, 0x62, 0x99, 0xBC, 0xD3, 0xF6,
0x1A, 0x3F, 0x50, 0x75, 0x8E, 0xAB, 0xC4, 0xE1,
0x17, 0x32, 0x5D, 0x78, 0x83, 0xA6, 0xC9, 0xEC,
0x34, 0x11, 0x7E, 0x5B, 0xA0, 0x85, 0xEA, 0xCF,
0x39, 0x1C, 0x73, 0x56, 0xAD, 0x88, 0xE7, 0xC2,
0x2E, 0x0B, 0x64, 0x41, 0xBA, 0x9F, 0xF0, 0xD5,
0x23, 0x06, 0x69, 0x4C, 0xB7, 0x92, 0xFD, 0xD8,
0x68, 0x4D, 0x22, 0x07, 0xFC, 0xD9, 0xB6, 0x93,
0x65, 0x40, 0x2F, 0x0A, 0xF1, 0xD4, 0xBB, 0x9E,
0x72, 0x57, 0x38, 0x1D, 0xE6, 0xC3, 0xAC, 0x89,
0x7F, 0x5A, 0x35, 0x10, 0xEB, 0xCE, 0xA1, 0x84,
0x5C, 0x79, 0x16, 0x33, 0xC8, 0xED, 0x82, 0xA7,
0x51, 0x74, 0x1B, 0x3E, 0xC5, 0xE0, 0x8F, 0xAA,
0x46, 0x63, 0x0C, 0x29, 0xD2, 0xF7, 0x98, 0xBD,
0x4B, 0x6E, 0x01, 0x24, 0xDF, 0xFA, 0x95, 0xB0,
0xD0, 0xF5, 0x9A, 0xBF, 0x44, 0x61, 0x0E, 0x2B,
0xDD, 0xF8, 0x97, 0xB2, 0x49, 0x6C, 0x03, 0x26,
0xCA, 0xEF, 0x80, 0xA5, 0x5E, 0x7B, 0x14, 0x31,
0xC7, 0xE2, 0x8D, 0xA8, 0x53, 0x76, 0x19, 0x3C,
0xE4, 0xC1, 0xAE, 0x8B, 0x70, 0x55, 0x3A, 0x1F,
0xE9, 0xCC, 0xA3, 0x86, 0x7D, 0x58, 0x37, 0x12,
0xFE, 0xDB, 0xB4, 0x91, 0x6A, 0x4F, 0x20, 0x05,
0xF3, 0xD6, 0xB9, 0x9C, 0x67, 0x42, 0x2D, 0x08,
0xB8, 0x9D, 0xF2, 0xD7, 0x2C, 0x09, 0x66, 0x43,
0xB5, 0x90, 0xFF, 0xDA, 0x21, 0x04, 0x6B, 0x4E,
0xA2, 0x87, 0xE8, 0xCD, 0x36, 0x13, 0x7C, 0x59,
0xAF, 0x8A, 0xE5, 0xC0, 0x3B, 0x1E, 0x71, 0x54,
0x8C, 0xA9, 0xC6, 0xE3, 0x18, 0x3D, 0x52, 0x77,
0x81, 0xA4, 0xCB, 0xEE, 0x15, 0x30, 0x5F, 0x7A,
0x96, 0xB3, 0xDC, 0xF9, 0x02, 0x27, 0x48, 0x6D,
0x9B, 0xBE, 0xD1, 0xF4, 0x0F, 0x2A, 0x45, 0x60
};
while (length‐‐)
crc = crc_table[crc ^ *ptr++];
return crc;
I came as far as this, but a don't understand this bit of c code:
while (length‐‐)
crc = crc_table[crc ^ *ptr++];
return crc;
Private Shared CrcTable As UShort() = {&H0, &H25, &H4A, &H6F, &H94, &HB1, &HDE, &HFB, _
&HD, &H28, &H47, &H62, &H99, &HBC, &HD3, &HF6, _
&H1A, &H3F, &H50, &H75, &H8E, &HAB, &HC4, &HE1, _
&H17, &H32, &H5D, &H78, &H83, &HA6, &HC9, &HEC, _
&H34, &H11, &H7E, &H5B, &HA0, &H85, &HEA, &HCF, _
&H39, &H1C, &H73, &H56, &HAD, &H88, &HE7, &HC2, _
&H2E, &HB, &H64, &H41, &HBA, &H9F, &HF0, &HD5, _
&H23, &H6, &H69, &H4C, &HB7, &H92, &HFD, &HD8, _
&H68, &H4D, &H22, &H7, &HFC, &HD9, &HB6, &H93, _
&H65, &H40, &H2F, &HA, &HF1, &HD4, &HBB, &H9E, _
&H72, &H57, &H38, &H1D, &HE6, &HC3, &HAC, &H89, _
&H7F, &H5A, &H35, &H10, &HEB, &HCE, &HA1, &H84, _
&H5C, &H79, &H16, &H33, &HC8, &HED, &H82, &HA7, _
&H51, &H74, &H1B, &H3E, &HC5, &HE0, &H8F, &HAA, _
&H46, &H63, &HC, &H29, &HD2, &HF7, &H98, &HBD, _
&H4B, &H6E, &H1, &H24, &HDF, &HFA, &H95, &HB0, _
&HD0, &HF5, &H9A, &HBF, &H44, &H61, &HE, &H2B, _
&HDD, &HF8, &H97, &HB2, &H49, &H6C, &H3, &H26, _
&HCA, &HEF, &H80, &HA5, &H5E, &H7B, &H14, &H31, _
&HC7, &HE2, &H8D, &HA8, &H53, &H76, &H19, &H3C, _
&HE4, &HC1, &HAE, &H8B, &H70, &H55, &H3A, &H1F, _
&HE9, &HCC, &HA3, &H86, &H7D, &H58, &H37, &H12, _
&HFE, &HDB, &HB4, &H91, &H6A, &H4F, &H20, &H5, _
&HF3, &HD6, &HB9, &H9C, &H67, &H42, &H2D, &H8, _
&HB8, &H9D, &HF2, &HD7, &H2C, &H9, &H66, &H43, _
&HB5, &H90, &HFF, &HDA, &H21, &H4, &H6B, &H4E, _
&HA2, &H87, &HE8, &HCD, &H36, &H13, &H7C, &H59, _
&HAF, &H8A, &HE5, &HC0, &H3B, &H1E, &H71, &H54, _
&H8C, &HA9, &HC6, &HE3, &H18, &H3D, &H52, &H77, _
&H81, &HA4, &HCB, &HEE, &H15, &H30, &H5F, &H7A, _
&H96, &HB3, &HDC, &HF9, &H2, &H27, &H48, &H6D, _
&H9B, &HBE, &HD1, &HF4, &HF, &H2A, &H45, &H60}
Any help would be appreciated!!
In this example message is 34 32 the checksum.
02 30 31 30 32 32 33 32 03 34 32
All replies (5)
Thursday, November 21, 2013 10:25 AM ✅Answered
@ Monkeyboy :This is C code, not C#
@ Jochem
That would be that
Public Class Form1
Private Shared CrcTable() As Byte = {&H0, &H25, &H4A, &H6F, &H94, &HB1, &HDE, &HFB, _
&HD, &H28, &H47, &H62, &H99, &HBC, &HD3, &HF6, _
&H1A, &H3F, &H50, &H75, &H8E, &HAB, &HC4, &HE1, _
&H17, &H32, &H5D, &H78, &H83, &HA6, &HC9, &HEC, _
&H34, &H11, &H7E, &H5B, &HA0, &H85, &HEA, &HCF, _
&H39, &H1C, &H73, &H56, &HAD, &H88, &HE7, &HC2, _
&H2E, &HB, &H64, &H41, &HBA, &H9F, &HF0, &HD5, _
&H23, &H6, &H69, &H4C, &HB7, &H92, &HFD, &HD8, _
&H68, &H4D, &H22, &H7, &HFC, &HD9, &HB6, &H93, _
&H65, &H40, &H2F, &HA, &HF1, &HD4, &HBB, &H9E, _
&H72, &H57, &H38, &H1D, &HE6, &HC3, &HAC, &H89, _
&H7F, &H5A, &H35, &H10, &HEB, &HCE, &HA1, &H84, _
&H5C, &H79, &H16, &H33, &HC8, &HED, &H82, &HA7, _
&H51, &H74, &H1B, &H3E, &HC5, &HE0, &H8F, &HAA, _
&H46, &H63, &HC, &H29, &HD2, &HF7, &H98, &HBD, _
&H4B, &H6E, &H1, &H24, &HDF, &HFA, &H95, &HB0, _
&HD0, &HF5, &H9A, &HBF, &H44, &H61, &HE, &H2B, _
&HDD, &HF8, &H97, &HB2, &H49, &H6C, &H3, &H26, _
&HCA, &HEF, &H80, &HA5, &H5E, &H7B, &H14, &H31, _
&HC7, &HE2, &H8D, &HA8, &H53, &H76, &H19, &H3C, _
&HE4, &HC1, &HAE, &H8B, &H70, &H55, &H3A, &H1F, _
&HE9, &HCC, &HA3, &H86, &H7D, &H58, &H37, &H12, _
&HFE, &HDB, &HB4, &H91, &H6A, &H4F, &H20, &H5, _
&HF3, &HD6, &HB9, &H9C, &H67, &H42, &H2D, &H8, _
&HB8, &H9D, &HF2, &HD7, &H2C, &H9, &H66, &H43, _
&HB5, &H90, &HFF, &HDA, &H21, &H4, &H6B, &H4E, _
&HA2, &H87, &HE8, &HCD, &H36, &H13, &H7C, &H59, _
&HAF, &H8A, &HE5, &HC0, &H3B, &H1E, &H71, &H54, _
&H8C, &HA9, &HC6, &HE3, &H18, &H3D, &H52, &H77, _
&H81, &HA4, &HCB, &HEE, &H15, &H30, &H5F, &H7A, _
&H96, &HB3, &HDC, &HF9, &H2, &H27, &H48, &H6D, _
&H9B, &HBE, &HD1, &HF4, &HF, &H2A, &H45, &H60}
'<-- ptr is the index of an array of char (Byte) Your code dont
'show the array, so I assumed as string
Public SomeData As String = "CrazyPennie"
Function _CRC() As Byte
Dim length As Integer = SomeData.Length
Dim crc As Byte = 0
Dim ptr As Integer = 0
While length > -1
length -= 1
crc = CrcTable(crc Xor Asc(SomeData(ptr)))
ptr += 1
End While
Return crc
End Function
Thursday, November 21, 2013 6:08 PM ✅Answered
@ Monkeyboy :This is C code, not C#
@ Jochem
That would be that
Public Class Form1 Private Shared CrcTable() As Byte = {&H0, &H25, &H4A, &H6F, &H94, &HB1, &HDE, &HFB, _ &HD, &H28, &H47, &H62, &H99, &HBC, &HD3, &HF6, _ &H1A, &H3F, &H50, &H75, &H8E, &HAB, &HC4, &HE1, _ &H17, &H32, &H5D, &H78, &H83, &HA6, &HC9, &HEC, _ &H34, &H11, &H7E, &H5B, &HA0, &H85, &HEA, &HCF, _ &H39, &H1C, &H73, &H56, &HAD, &H88, &HE7, &HC2, _ &H2E, &HB, &H64, &H41, &HBA, &H9F, &HF0, &HD5, _ &H23, &H6, &H69, &H4C, &HB7, &H92, &HFD, &HD8, _ &H68, &H4D, &H22, &H7, &HFC, &HD9, &HB6, &H93, _ &H65, &H40, &H2F, &HA, &HF1, &HD4, &HBB, &H9E, _ &H72, &H57, &H38, &H1D, &HE6, &HC3, &HAC, &H89, _ &H7F, &H5A, &H35, &H10, &HEB, &HCE, &HA1, &H84, _ &H5C, &H79, &H16, &H33, &HC8, &HED, &H82, &HA7, _ &H51, &H74, &H1B, &H3E, &HC5, &HE0, &H8F, &HAA, _ &H46, &H63, &HC, &H29, &HD2, &HF7, &H98, &HBD, _ &H4B, &H6E, &H1, &H24, &HDF, &HFA, &H95, &HB0, _ &HD0, &HF5, &H9A, &HBF, &H44, &H61, &HE, &H2B, _ &HDD, &HF8, &H97, &HB2, &H49, &H6C, &H3, &H26, _ &HCA, &HEF, &H80, &HA5, &H5E, &H7B, &H14, &H31, _ &HC7, &HE2, &H8D, &HA8, &H53, &H76, &H19, &H3C, _ &HE4, &HC1, &HAE, &H8B, &H70, &H55, &H3A, &H1F, _ &HE9, &HCC, &HA3, &H86, &H7D, &H58, &H37, &H12, _ &HFE, &HDB, &HB4, &H91, &H6A, &H4F, &H20, &H5, _ &HF3, &HD6, &HB9, &H9C, &H67, &H42, &H2D, &H8, _ &HB8, &H9D, &HF2, &HD7, &H2C, &H9, &H66, &H43, _ &HB5, &H90, &HFF, &HDA, &H21, &H4, &H6B, &H4E, _ &HA2, &H87, &HE8, &HCD, &H36, &H13, &H7C, &H59, _ &HAF, &H8A, &HE5, &HC0, &H3B, &H1E, &H71, &H54, _ &H8C, &HA9, &HC6, &HE3, &H18, &H3D, &H52, &H77, _ &H81, &HA4, &HCB, &HEE, &H15, &H30, &H5F, &H7A, _ &H96, &HB3, &HDC, &HF9, &H2, &H27, &H48, &H6D, _ &H9B, &HBE, &HD1, &HF4, &HF, &H2A, &H45, &H60} '<-- ptr is the index of an array of char (Byte) Your code dont 'show the array, so I assumed as string Public SomeData As String = "CrazyPennie" Function _CRC() As Byte Dim length As Integer = SomeData.Length Dim crc As Byte = 0 Dim ptr As Integer = 0 While length > -1 length -= 1 crc = CrcTable(crc Xor Asc(SomeData(ptr))) ptr += 1 End While Return crc End Function
Oh. My free Tangible demo code converters snippet converter returned the below code. But I don't know what the "- -" in "Do While Length - -" should mean.
Private Function calculate_crc(ByVal ptr As String, ByVal length As UInteger, ByVal crc As Byte) As Byte
Dim crc_table() As Byte = {
&H0, &H25, &H4A, &H6F, &H94, &HB1, &HDE, &HFB,
&HD, &H28, &H47, &H62, &H99, &HBC, &HD3, &HF6,
&H1A, &H3F, &H50, &H75, &H8E, &HAB, &HC4, &HE1,
&H17, &H32, &H5D, &H78, &H83, &HA6, &HC9, &HEC,
&H34, &H11, &H7E, &H5B, &HA0, &H85, &HEA, &HCF,
&H39, &H1C, &H73, &H56, &HAD, &H88, &HE7, &HC2,
&H2E, &HB, &H64, &H41, &HBA, &H9F, &HF0, &HD5,
&H23, &H6, &H69, &H4C, &HB7, &H92, &HFD, &HD8,
&H68, &H4D, &H22, &H7, &HFC, &HD9, &HB6, &H93,
&H65, &H40, &H2F, &HA, &HF1, &HD4, &HBB, &H9E,
&H72, &H57, &H38, &H1D, &HE6, &HC3, &HAC, &H89,
&H7F, &H5A, &H35, &H10, &HEB, &HCE, &HA1, &H84,
&H5C, &H79, &H16, &H33, &HC8, &HED, &H82, &HA7,
&H51, &H74, &H1B, &H3E, &HC5, &HE0, &H8F, &HAA,
&H46, &H63, &HC, &H29, &HD2, &HF7, &H98, &HBD,
&H4B, &H6E, &H1, &H24, &HDF, &HFA, &H95, &HB0,
&HD0, &HF5, &H9A, &HBF, &H44, &H61, &HE, &H2B,
&HDD, &HF8, &H97, &HB2, &H49, &H6C, &H3, &H26,
&HCA, &HEF, &H80, &HA5, &H5E, &H7B, &H14, &H31,
&HC7, &HE2, &H8D, &HA8, &H53, &H76, &H19, &H3C,
&HE4, &HC1, &HAE, &H8B, &H70, &H55, &H3A, &H1F,
&HE9, &HCC, &HA3, &H86, &H7D, &H58, &H37, &H12,
&HFE, &HDB, &HB4, &H91, &H6A, &H4F, &H20, &H5,
&HF3, &HD6, &HB9, &H9C, &H67, &H42, &H2D, &H8,
&HB8, &H9D, &HF2, &HD7, &H2C, &H9, &H66, &H43,
&HB5, &H90, &HFF, &HDA, &H21, &H4, &H6B, &H4E,
&HA2, &H87, &HE8, &HCD, &H36, &H13, &H7C, &H59,
&HAF, &H8A, &HE5, &HC0, &H3B, &H1E, &H71, &H54,
&H8C, &HA9, &HC6, &HE3, &H18, &H3D, &H52, &H77,
&H81, &HA4, &HCB, &HEE, &H15, &H30, &H5F, &H7A,
&H96, &HB3, &HDC, &HF9, &H2, &H27, &H48, &H6D,
&H9B, &HBE, &HD1, &HF4, &HF, &H2A, &H45, &H60
}
Do While length‐‐
crc = crc_table(crc Xor ptr)
ptr &= 1
Loop
Return crc
End Function
End Class
Please BEWARE that I have NO EXPERIENCE and NO EXPERTISE and probably onset of DEMENTIA which may affect my answers! Also, I've been told by an expert, that when you post an image it clutters up the thread and mysteriously, over time, the link to the image will somehow become "unstable" or something to that effect. :) I can only surmise that is due to Global Warming of the threads.
Tuesday, November 12, 2013 9:56 PM
I don't understand it either
1 - the code re-calculates the crc for each operation, which checksums don't do, they xor the previous result or something similar
2 - the function returns a byte but you say :
In this example message "02 30 31 30 32 32 33 32 03 34 32" is 34 32 the checksum
Wednesday, November 20, 2013 9:49 AM
I am afraid that we cannot change C code to VB.NET Code. Try to call this function in your vb.net code and see the output.
Thursday, November 21, 2013 1:12 AM
Try an online C# to visual basic code converter. I used Telerik. Below is the result for
while (length‐‐)
crc = crc_table[crc ^ *ptr++];
return crc;
While length
crc = crc_table(crc Xor System.Math.Max(System.Threading.Interlocked.Increment(ptr),ptr - 1).Target)
End While
Return crc
'=======================================================
'Service provided by Telerik (www.telerik.com)
'Conversion powered by NRefactory.
'Twitter: @telerik
'Facebook: facebook.com/telerik
'=======================================================
Please BEWARE that I have NO EXPERIENCE and NO EXPERTISE and probably onset of DEMENTIA which may affect my answers! Also, I've been told by an expert, that when you post an image it clutters up the thread and mysteriously, over time, the link to the image will somehow become "unstable" or something to that effect. :) I can only surmise that is due to Global Warming of the threads.