1423 |
1423 |
1424 !LargeInteger methodsFor:'byte access'! |
1424 !LargeInteger methodsFor:'byte access'! |
1425 |
1425 |
1426 byteSwapped |
1426 byteSwapped |
1427 "lsb -> msb; |
1427 "lsb -> msb; |
1428 i.e. a.b.c.d -> d.c.b.a" |
1428 i.e. a.b ... y.z -> z.y. ... b.a" |
1429 |
1429 |
1430 ^ self class digitBytes:digitByteArray MSB:true |
1430 ^ self class digitBytes:digitByteArray MSB:true |
1431 |
1431 |
1432 " |
1432 " |
1433 (LargeInteger value:16r11223344) byteSwapped hexPrintString |
1433 (LargeInteger value:16r11223344) byteSwapped hexPrintString |
1434 (LargeInteger value:16r44332211) byteSwapped hexPrintString |
1434 (LargeInteger value:16r44332211) byteSwapped hexPrintString |
1435 16r88776655 byteSwapped hexPrintString |
1435 16r88776655 byteSwapped hexPrintString |
1436 16r11223344 byteSwapped hexPrintString |
1436 16r11223344 byteSwapped hexPrintString |
|
1437 " |
|
1438 |
|
1439 "Created: / 31-01-2012 / 11:07:42 / cg" |
|
1440 ! |
|
1441 |
|
1442 byteSwapped32 |
|
1443 "byte swap a 32bit value; lsb -> msb; |
|
1444 i.e. a.b.c.d -> d.c.b.a |
|
1445 Useful for communication protocols" |
|
1446 |
|
1447 %{ |
|
1448 unsigned INT swapped; |
|
1449 |
|
1450 swapped = ( (__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[0]) << 24) |
|
1451 | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[1]) << 16) |
|
1452 | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[2]) << 8) |
|
1453 | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[3])); |
|
1454 RETURN (__MKUINT(swapped)); |
|
1455 %}. |
|
1456 |
|
1457 " |
|
1458 (LargeInteger value:16r11223344) byteSwapped hexPrintString |
|
1459 (LargeInteger value:16r44332211) byteSwapped hexPrintString |
|
1460 16r88776655 byteSwapped hexPrintString |
|
1461 16r11223344 byteSwapped hexPrintString |
|
1462 " |
|
1463 |
|
1464 "Created: / 31-01-2012 / 11:07:42 / cg" |
|
1465 ! |
|
1466 |
|
1467 byteSwapped64 |
|
1468 "byte swap a 64bit value; lsb -> msb; |
|
1469 i.e. a.b.c.d.e.f.g.h -> h.g.f.e.d.c.b.a |
|
1470 Useful for communication protocols" |
|
1471 |
|
1472 %{ |
|
1473 unsigned INT swappedLO = 0; |
|
1474 unsigned INT swappedHI; |
|
1475 unsigned INT swapped; |
|
1476 |
|
1477 swappedHI = ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[0]) << 24) |
|
1478 | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[1]) << 16) |
|
1479 | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[2]) << 8) |
|
1480 | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[3])); |
|
1481 if (__byteArraySize(__INST(digitByteArray)) > 4) { |
|
1482 swappedLO = ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[4]) << 24) |
|
1483 | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[5]) << 16) |
|
1484 | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[6]) << 8) |
|
1485 | ((__ByteArrayInstPtr(__INST(digitByteArray))->ba_element[7])); |
|
1486 } |
|
1487 |
|
1488 #if __POINTER_SIZE__ == 8 |
|
1489 swapped = (swappedHI<<32) | swappedLO; |
|
1490 return __MKUINT( swapped ); |
|
1491 #else |
|
1492 return __MKLARGEINT64(1, swappedLO, swappedHI); |
|
1493 #endif |
|
1494 %}. |
|
1495 |
|
1496 " |
|
1497 (LargeInteger value:16r11223344) byteSwapped64 hexPrintString |
|
1498 (LargeInteger value:16r44332211) byteSwapped64 hexPrintString |
|
1499 (LargeInteger value:16r1122334455667788) byteSwapped64 hexPrintString |
|
1500 (LargeInteger value:16r8877665544332211) byteSwapped64 hexPrintString |
|
1501 16r88776655 byteSwapped hexPrintString |
|
1502 16r11223344 byteSwapped hexPrintString |
1437 " |
1503 " |
1438 |
1504 |
1439 "Created: / 31-01-2012 / 11:07:42 / cg" |
1505 "Created: / 31-01-2012 / 11:07:42 / cg" |
1440 ! |
1506 ! |
1441 |
1507 |