You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

protoBuffer.js 1.1KB

123456789101112131415161718192021222324252627282930313233343536
  1. // protoBuffer.js
  2. import VarintElement from './varintElement.js'; // 导入 VarintElement
  3. function findVarint(hexData) {
  4. // hexData 是 Uint8Array,直接遍历字节
  5. // 定义返回对象,初始化为 null
  6. let ret = null;
  7. for (let i = 0; i < hexData.length; i++) {
  8. // 检查最高位是否为 1(即 & 0x80 是否非零)
  9. if ((hexData[i] & 0x80) !== 0) {
  10. continue; // 如果最高位为 1,则继续检查下一个字节
  11. }
  12. // 找到 Varint 终止字节
  13. ret = new VarintElement();
  14. ret.endPos = i + 1; // 结束位置,以字节为单位
  15. ret.varint = hexData.slice(0, i + 1); // 提取 Varint 部分,返回 Uint8Array
  16. // 如果需要将 varint 转换为字符串格式
  17. /*
  18. ret.varint = Array.from(hexData.slice(0, i + 1)) // 转为数组
  19. .map(byte => byte.toString(16).padStart(2, '0')) // 转为两位十六进制字符串
  20. .join(' ')
  21. .toUpperCase();
  22. */
  23. // 退出循环
  24. break;
  25. }
  26. // 如果未找到 Varint 终止字节,返回 null
  27. return ret;
  28. }
  29. // 使用 module.exports 导出
  30. module.exports = { findVarint };