如何在Nodejs Buffer上处理类似struct union类型的C?

 爱她拿命换 发布于 2023-02-04 13:18

我正在尝试解析使用struct union类型的Nodejs上的缓冲区,我如何在Nodejs上本地处理它?我完全迷失了.

typedef union
{
   unsigned int value;
   struct
   {
      unsigned int seconds :6;
      unsigned int minutes :6;
      unsigned int hours   :5;
      unsigned int days    :15; // from 01/01/2000
   } info;
}__attribute__((__packed__)) datetime;

Matt Greer.. 7

这个联合是一个32位整数value,或者info是32位分隔成6,6,5和15位块的结构.我从来没有在Node中使用过这样的东西,但我怀疑在Node中它只是一个数字.如果是这种情况,你可以得到这样的部分:

var value = ...; // the datetime value you got from the C code

var seconds = value & 0x3F;          // mask to just get the bottom six bits
var minutes = ((value >> 6) & 0x3F); // shift the bits down by six
                                     // then mask out the bottom six bits
var hours = ((value >> 12) & 0x1F);   // shift by 12, grab bottom 5
var days = ((value >> 17) & 0x7FFF);  // shift by 17, grab bottom 15

如果你不熟悉按位操作,这可能看起来像伏都教.在这种情况下,尝试像这样的教程(它适用于C,但它仍然很大程度上适用)

1 个回答
  • 这个联合是一个32位整数value,或者info是32位分隔成6,6,5和15位块的结构.我从来没有在Node中使用过这样的东西,但我怀疑在Node中它只是一个数字.如果是这种情况,你可以得到这样的部分:

    var value = ...; // the datetime value you got from the C code
    
    var seconds = value & 0x3F;          // mask to just get the bottom six bits
    var minutes = ((value >> 6) & 0x3F); // shift the bits down by six
                                         // then mask out the bottom six bits
    var hours = ((value >> 12) & 0x1F);   // shift by 12, grab bottom 5
    var days = ((value >> 17) & 0x7FFF);  // shift by 17, grab bottom 15
    

    如果你不熟悉按位操作,这可能看起来像伏都教.在这种情况下,尝试像这样的教程(它适用于C,但它仍然很大程度上适用)

    2023-02-04 13:21 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有