PcapPlusPlus GeneralUtils.h 通用工具解析 16进制字符串转换

GeneralUtils 通用工具

头文件中提供了两个开放接口,实现byte数组与16进制字符串相互的转换。
PcapPlusPlus GeneralUtils.h 通用工具解析 16进制字符串转换_第1张图片

byte数组转16进制字符串实现

PcapPlusPlus GeneralUtils.h 通用工具解析 16进制字符串转换_第2张图片
主要使用了 std::stringstream 这个内置类,继承关系如下
PcapPlusPlus GeneralUtils.h 通用工具解析 16进制字符串转换_第3张图片
std::hex 表示后续使用16进制输出。std::hex实际上是一个函数,类似的有std::oct、std::dec
PcapPlusPlus GeneralUtils.h 通用工具解析 16进制字符串转换_第4张图片

dataStream << std::setw(2) << std::setfill(‘0’) << (int)byteArr[i];

设置宽度为2,填充字符为0。后续输入的int类型都会按之前的格式在stringstream中进行存储为string形式。
需要注意的是
PcapPlusPlus GeneralUtils.h 通用工具解析 16进制字符串转换_第5张图片
也就是说setw这个函数设置后如果进行输入,就会被重置,所以需要在for循环过程中每次都要设置setw函数。

string 转 byte数组

PcapPlusPlus GeneralUtils.h 通用工具解析 16进制字符串转换_第6张图片
在.cpp文件中函数使用static关键字表示该函数是文本作用域,即只有当前文本内可以使用该函数。该函数的目的就是将16进制的字符[0-9][aA-fF]转化为相应的int值。example:a会获得10,b会获得11,c会获得12。
PcapPlusPlus GeneralUtils.h 通用工具解析 16进制字符串转换_第7张图片
for (size_t i = 0; i < hexString.length(); i += 2)
循环中每次增加2位,因为16进制字符串中2位数字的最大值为255,一个byte能够表示的最大值也是255。
计算如下:
16进制 ff = 分别获得 15 和 15
15 * 16 + 15 = 255
1个 byte 最大值 = 255

你可能感兴趣的:(PcapPlusPlus)