Training, Open Source computer languages
PerlPHPPythonMySQLApache / TomcatTclRubyJavaC and C++LinuxCSS 
Search for:
Home Accessibility Courses Diary The Mouth Forum Resources Site Map About Us Contact
 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
Generating checksum - processing at byte level

Posted by TimT (TimT), 9 September 2004
I am trying to calcuate a checksum on a string
- XORing each character in turn
But after the first XOR the value is a string and not a byte so it fails to continue

How do I keep the XORed result as a byte (or in binary)?


the code is as follows - defaults to wish but really a tcl program:

#!usr/bin/wish

;# CheckSum calculate:
;# XOR each byte with the previous
;# ie XOR byte 1 and 2 then XOR the result with the  next byte
;# and repeat until all bytes have been XOR
;# the FCS is the value left


set tstrg "ABCDE"
set len [string length $tstrg]
set fcs [string index $tstrg 0]

puts "\nstring test: $tstrg and first character is $fcs\n"

for {set n 1} {$n < $len} {incr n} {
     set indx [string index $tstrg $n]
     puts "$fcs and $indx are XORed to:"
     binary scan $fcs c bfcs
     binary scan $indx c bstrg
     set fcs [expr $bfcs ^ $bstrg] ;# XOR binarys: bfcs bstrg
;# BUT the above line sets fcs to a string of the value
;#  NOT the binary or as a single byte
;# so from next loop on it is wrong
;# *** how do you keep (or convert) the fcs value as a single binary byte?
     puts "$bfcs, $bstrg goto $fcs"
}
puts "FCS is $fcs"

exit

Posted by admin (Graham Ellis), 10 September 2004
I think this demonstrates what you're looking for ...


Code:
set source "Hello World and Tim"
set sofar 0
for {set k 0} {$k < [string length $source]} {incr k} {
binary scan [string index $source $k] c dd
set sofar [expr $dd ^ $sofar]
puts "$dd $sofar"
}


Which runs as follows:

Code:
72 72
101 45
108 65
108 45
111 66
32 98
87 53
111 90
114 40
108 68
100 32
32 0
97 97
110 15
100 107
32 75
84 31
105 118
109 27



Posted by TimT (TimT), 10 September 2004
Your code seems similar to mine apart from being more compact
- but it makes all the difference

Thanks
Tim



This page is a thread posted to the opentalk forum at www.opentalk.org.uk and archived here for reference. To jump to the archive index please follow this link.

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2024: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 793803 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho