Open idofront opened 2 months ago
copilot より
#include <cstdint> #include <Packet/Udp.hpp> #include <Packet/Binary.hpp> namespace Packet { uint16_t CalculateUdpChecksum(UdpPtr udp) { if (!udp) { throw std::invalid_argument("udp instance is null"); } // Assuming udp has a method to get the binary stack auto binary = std::dynamic_pointer_cast<Binary>(udp->GetStack()); if (!binary) { throw std::invalid_argument("binary stack is null"); } // Retrieve the UDP header and payload const uint8_t* data = binary->Data(); size_t length = binary->Size(); // Calculate checksum uint32_t sum = 0; for (size_t i = 0; i < length; i += 2) { uint16_t word = data[i] << 8; if (i + 1 < length) { word |= data[i + 1]; } sum += word; } // Add carry while (sum >> 16) { sum = (sum & 0xFFFF) + (sum >> 16); } // One's complement return ~sum; } }
big-endian で返る。
copilot より
big-endian で返る。