首页 > 系统服务 > 详细

Macros之PRId64

时间:2020-03-12 20:58:25      阅读:82      评论:0      收藏:0      [点我收藏+]

访问特定宽度整型数据时常会遇到类似PRId32、PRId64。比较常见的如流媒体处理中的时间戳。

以下的这些宏可扩展为基于特定宽度的整型类型包含相应printf或者scanf格式化的字符串

头文件:<inttypes.h>

技术分享图片

 

下面以一个使用中的例子来真切的认识PRId64这种宏的使用

例子1

#include <stdio.h> 
#include <stdint.h>
#include <inttypes.h>   /* strtoimax, PRIdMAX, SCNdMAX */

int main ()
{
  char buffer[80];
  intmax_t foo,bar;

  printf ("Please, enter a number: ");
  fgets (buffer,80,stdin);
  foo = strtoimax (buffer,NULL,10);

  printf ("Thanks for entering %" PRIdMAX ".\n", foo);

  printf ("Please, enter another number: ");
  scanf ("%" SCNdMAX,&bar);

  printf ("%" PRIdMAX " by %" PRIdMAX " is %" PRIdMAX, foo, bar, foo*bar);

  return 0;
}  

结果输出:

技术分享图片

例子2: 打印时间戳

 //代码摘自Android开源

std::unique_ptr<AutoConditionLock> AutoConditionLock::waitAndAcquire(
            const std::shared_ptr<WaitableMutexWrapper>& manager, nsecs_t waitTime) {
  if (manager == nullptr || manager->mMutex == nullptr) {
    return std::unique_ptr<AutoConditionLock>{nullptr};
  }
  std::unique_ptr<AutoConditionLock> scopedLock(new AutoConditionLock(manager));
  nsecs_t failTime = systemTime(SYSTEM_TIME_MONOTONIC) + waitTime;
  while (manager->mState) {
    status_t ret = manager->mCondition.waitRelative(*(manager->mMutex), waitTime);
    if (ret != NO_ERROR) {
      return std::unique_ptr<AutoConditionLock>{nullptr};
    }
    waitTime = failTime - systemTime(SYSTEM_TIME_MONOTONIC);
  }
  //这里是自己加的调试输出,获取lock的等待时间
  ALOGE("%s[%d] acquire mServiceLock wait:%" PRId64 "ns", __func__, __LINE__, waitTime);
  manager->mState = true;
scopedLock->mAcquired = true;
  return scopedLock;
}

  

Macros之PRId64

原文:https://www.cnblogs.com/yemaomao/p/12470426.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!