-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 3977346
  • 博文数量: 536
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(536)

文章存档

2024年(3)

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(252)

2006年(73)

分类:

2007-10-18 15:03:55

把linux的东西移植到windows 下, 问题真是多, 有时候感觉很是奇怪! 今天有遇到了一个!

__int64在windows下怎么输出的问题? 我还以为是强制转换的时候出问题了, 查了好长时间!

下面是测试代码, 已经通过windws, linux两个平台的测试了!

#include <stdio.h>

#ifdef _win32
typedef unsigned __int64 uint64_t;
#else
typedef unsigned long long uint64_t;
#endif

typedef unsigned int uint32_t;
typedef unsigned short uint16_t;
typedef unsigned char uint8_t;

int main(int argc, char *argv[])
{
  uint32_t t321, t322, t323;
  uint64_t t641, t642, t643;
  uint8_t *p;

  uint8_t t[64] =
    {
        0x4e, 0x7c, 0x00, 0x00, 0x00, 0x00,
        0x4e, 0x7c, 0x00, 0x00, 0x00, 0x00,
        0x04, 0x00, 0x00, 0x00, 0x00, 0x00
    };

  printf(
    "sizeof(uint64_t) = %d\n"
    "sizeof(uint32_t) = %d\n"
    , sizeof(uint64_t), sizeof(uint32_t));

  p = t;
  t321 = *(uint32_t *)p; p = 6;
  t322 = *(uint32_t *)p; p = 6;
  t323 = *(uint32_t *)p; p = 6;

  printf("t321[%x].%d t322[%x].%d t323[%x].%d\n"
    , t321, t321, t322, t322, t323, t323);

  p = t;
  t641 = *(uint32_t *)p; p = 6;
  t642 = *(uint32_t *)p; p = 6;
  t643 = *(uint32_t *)p; p = 6;

#ifdef _win32
  printf("t641[%i64x].%i64d t642[%i64x].%i64d t643[%i64x].%i64d\n"
    , t641, t641, t642, t642, t643, t643);
#else
  printf("t641[%llx].%lld t642[%llx].%lld t643[%llx].%lld\n"
    , t641, t641, t642, t642, t643, t643);
#endif

  t641 = 0x1122334455667788;

#ifdef _win32
  printf("%i64x %i64d \n", t641, t641);
#else
  printf("%llx %lld \n", t641, t641);
#endif

  return 0;
}


/*
test env:
    microsoft (r) 32-bit c/c optimizing compiler version 12.00.8168 for 80x86
    microsoft windows 2000 [version 5.00.2195]

result:
    sizeof(uint64_t) = 8
    sizeof(uint32_t) = 4
    t321[7c4e].31822 t322[7c4e].31822 t323[4].4
    t641[7c4e].31822 t642[7c4e].31822 t643[4].4
    1122334455667788 1234605616436508552

--------------------------------------
test env:
    gcc version 3.2.3 20030502 (red hat linux 3.2.3-47.3)

result:
    sizeof(uint64_t) = 8
    sizeof(uint32_t) = 4
    t321[7c4e].31822 t322[7c4e].31822 t323[4].4
    t641[7c4e].31822 t642[7c4e].31822 t643[4].4
    1122334455667788 1234605616436508552
 */

在进行移植的时候可能用的上的:
#ifdef _win32
#  define apr_uint64_t_hex_fmt     "llx"
#else
#  define apr_uint64_t_hex_fmt     "i64x"
#endif

example:
     sprintf(buf, "%" apr_uint64_t_hex_fmt, var);

#define host_widest_int_print_dec       "%i64d"
#define host_widest_int_print_unsigned  "%i64u"
#define host_widest_int_print_hex       "0x%i64x"
阅读(8048) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

2008-07-21 13:10:54

thanks for your sharing!

|
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图