【问题标题】:Equal different types with different sizes相同的不同类型与不同的大小
【发布时间】:2014-07-01 02:39:45
【问题描述】:

我想给这样的变量赋值:

rtpArray[bn].ts06_timestamp = rtpArray[bn].timestamps_shm_ptr_aux[SCPAD_TS06];

问题是,rtpArray[bn].ts06_timestamp 这是一种称为utdc_samples 的类型,它大于char,而rtpArray[bn].timestamps_shm_ptr_aux 是char 的数组。

我的问题是,这行得通吗?

【问题讨论】:

  • 编译你的代码,编译器会回答你的问题。
  • 编译成功并不意味着它会工作。有很多东西可以编译,但在问题域中绝对没有意义。
  • 我的感觉是这段代码可能不正确——时间戳不太可能用单个字节表示。您可能需要 memcpy 或右侧转换为适当的类型(可能还有字节序交换)。

标签: c memory types variable-assignment


【解决方案1】:

如果 rtpArray[bn].timestamps_shm_ptr_aux 是一个字符数组,则 rtpArray[bn].timestamps_shm_ptr_aux[SCPAD_TS06] 是单个 char 值。没有理由不能将它分配给更大的整数类型。

【讨论】:

    【解决方案2】:

    很难确定这一点,因为您没有显示代码使用的完整声明。

    您在右侧进行索引,这意味着右侧大小的结果是单个字符,即一个小整数。假设utdc_samples也是整数类型,但大于char,那么赋值就可以了。

    【讨论】:

    • @davmac 没关系,如果 put sizeof(utdc_samples) 对吗?我忘了 memcpy
    • @davmac 也许吧。我发现问题的代码很难安全地解释,因为没有显示类型。我重写了一些假设。
    • LHS 上不必是整数类型;只是一个数字类型。
    • @unwind,好的,我已经删除了早期的 cmets。
    猜你喜欢
    • 2015-10-29
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多