UncharToLong.cpp
上传用户:szhqbq
上传日期:2014-07-08
资源大小:46k
文件大小:2k
开发平台:

Visual C++

  1. #include "stdafx.h"
  2. //////////////////////////////////////////////////////////////////////////
  3. // void UintvarEncode(IN DWORD dwUintvar,IN BYTE byLength,IN OUT BYTE **ppPDU)
  4. // 函数功能:
  5. // 变长无符号整数编码,并填入PDU对应的位置
  6. // 参数说明:
  7. // dwUintvar: 输入参数,待编码的变长无符号整数
  8. //  byLength: 输入参数,变长无符号整数编码后的长度
  9. // ppPDU: 输入输出参数,指向PDU当前位置指针的指针
  10. // 返回值:
  11. //
  12. // 备注:
  13. // 整数填入了PDU后,PDU当前位置指针将后移
  14. // 修改记录:
  15. // 1: 谭伟基 2007/04/01撰写
  16. // 2:  谭伟基 2007/04/04修改
  17. //////////////////////////////////////////////////////////////////////////
  18. //void UintvarEncode(IN DWORD dwUintvar,
  19. //    IN OUT BYTE **ppPDU)
  20. void UintvarEncode(IN DWORD dwUintvar,
  21.    IN BYTE byLength, 
  22.    IN OUT BYTE **ppPDU)
  23. {
  24. /* int i;
  25. //找出编码结果的长度
  26. for (i = 4;(i >= 0)&&(!(dwUintvar>>i*7));i--)
  27. {
  28. }
  29. //对每7bit编码并填入PDU
  30. for(;i >= 0;i--,(*ppPDU)++)
  31. */
  32. for(int i = byLength - 1;i >=0;i--,(*ppPDU)++)
  33. {
  34. **ppPDU = (BYTE)((dwUintvar>>i*7)&0x7F)|(!i?0:0x80);
  35. }
  36. }
  37. //////////////////////////////////////////////////////////////////////////
  38. // BYTE GetUintvarLength(IN DWORD dwUintvar)
  39. // 函数功能:
  40. // 计算出变长无符号整数编码后的长度
  41. // 参数说明:
  42. // dwUintvar: 输入参数,待编码的变长无符号整数
  43. // 返回值:
  44. // 变长无符号整数编码后的长度
  45. // 备注:
  46. //
  47. // 修改记录:
  48. // 1: 谭伟基 2007/04/4撰写
  49. //////////////////////////////////////////////////////////////////////////
  50. BYTE GetUintvarLength(IN DWORD dwUintvar)
  51. {
  52. int i;
  53. if (!dwUintvar)
  54. {
  55. return 1;
  56. }
  57. for (i = 4;(i >= 0)&&(!(dwUintvar>>i*7));i--)
  58. {
  59. }
  60. return i+1;
  61. }