【问题标题】:Pointer subtraction on Big/Little endian大/小端的指针减法
【发布时间】:2017-02-02 13:50:05
【问题描述】:

这是一个查找字符串长度的示例程序。

    {
      char *ptr="Autobiography Of Yogi";
      char *a = ptr , *b = &ptr[20];
      printf(" length is %d ", (b-a)+1 ); // subtracting pointers to find string length 
    }

我的问题是,这个程序适用于小端和大端机器吗?

【问题讨论】:

  • 字节序对您的代码没有影响。但是由于硬编码20,您的代码还是很差。
  • 注意:指针减法导致ptrdiff_t类型可能与int不同。便携式C99代码使用printf("%td\n", (b-a)+1 );
  • 您的方法的主要问题是,为了使用它,您必须已经知道字符串长度......它是 21,而不是 20。

标签: c cpu-architecture


【解决方案1】:
  1. 您正在处理字符,因此小端或大端不会出现在图片中。它仅对 2 个或更多字节的数据值有效。

  2. 无论如何,指针的减法不依赖于小端或大端。

【讨论】:

  • @PaulOgilvie 单个字节对字节序不敏感
  • 他在减去字符指针。即使他减去 int 指针,无论字节顺序如何,结果都是相同的。这就是我在这里解释的内容。
【解决方案2】:

是的,没关系。只有在查看较大整数的单个字节时才会出现问题。

【讨论】:

  • @Govind Parmar 感谢您的编辑,但我回滚了它,因为我认为如果它说“数据类型大于一个字节”可能会引起混淆,因为例如字符串大于一个字节,但字节顺序无关紧要。字节序实际上只对整数(和有时浮点类型)很重要。
猜你喜欢
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 2011-04-20
  • 2019-05-24
  • 1970-01-01
相关资源
最近更新 更多