TS 自定义结构Long与number类型相互转换

简介: TS 自定义结构Long与number类型相互转换


TS 自定义结构Long 如下:

export interface Long {
/** Low bits */
low: number;
/** High bits */
high: number;
/** Whether unsigned or not */
unsigned: boolean;
} 
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11


根据给定的 Long 接口定义,我们可以实现 Long 类型number 类型之间的相互转换函数


首先,我们可以编写一个将 Long 转换为 number 的函数:

function longToNumber(longValue: Long): number {
  const { low, high, unsigned } = longValue;
  if (unsigned) {
    return (high >>> 0) * 4294967296 + (low >>> 0);
  } else {
    return high * 4294967296 + (low >>> 0);
  }
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9


上述函数 longToNumber 接受一个 Long 类型的参数 longValue,并根据 unsigned 属性的值,将其转换为相应的 number 类型。如果 unsignedtrue,我们使用无符号右移操作符 >>> 将低位和高位进行组合;如果 unsignedfalse,我们直接将低位和高位进行组合。


接下来,我们可以编写一个将 number 转换为 Long 的函数:

function numberToLong(numberValue: number): Long {
  const low = numberValue >>> 0;
  const high = Math.floor(numberValue / 4294967296);
  return {
    low,
    high,
    unsigned: numberValue < 0 ? true : false,
  };
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10


函数 numberToLong 接受一个 number 类型的参数 numberValue,并根据其值计算出低位和高位。我们使用无符号右移操作符 >>> 取得低位,使用 Math.floor 和除法运算计算出高位。根据 numberValue 的正负值,我们设置 unsigned 属性为相应的布尔值。


现在,我们可以使用上述函数进行 Long 类型和 number 类型之间的相互转换。

const longValue: Long = {
  low: 1234567890,
  high: 0,
  unsigned: false,
};
const numberValue = longToNumber(longValue);
console.log(numberValue); // 输出: 1234567890
const newLongValue = numberToLong(numberValue);
console.log(newLongValue); // 输出: { low: 1234567890, high: 0, unsigned: false }
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11


在上述示例中,我们首先定义了一个 Long 类型的值 longValue,然后使用 longToNumber 函数将其转换为 number 类型的值 numberValue。接着,我们使用 numberToLong 函数将 numberValue 转换回 Long 类型,并将结果存储在 newLongValue 中。

最后,我们分别打印了 numberValuenewLongValue 的值,验证了转换的准确性。


学习交流合作加好友

微信名片

 

显示推荐内容

欢迎使用 CSDNGreener,绿化设定按钮在这里!

好的,以后不再提示我

目录
相关文章
|
JavaScript Windows
Cocos Creator3.8 项目实战(十)使用 protobuf详细教程
Cocos Creator3.8 项目实战(十)使用 protobuf详细教程
1901 0
|
前端开发
前端Vue3使用Moment Timezone处理不同时区时间
认识基本时间表示字符,UTC,GMT等,用 moment-timezone 这个插件来获取时区,同时获取带时区的时间字段,以便后续业务处理。
1185 1
|
测试技术 C# 图形学
Unity3d 下websocket的使用
今天介绍一下如何在Unity3D下使用WebSocket。 首先介绍一下什么是websocket,以及与socket,和http的区别与联系,然后介绍一下websocket的一些开源的项目。 WebSocket是什么 WebSocket协议是为了实现网络客户端和服务器端全双工通信而引入的一种基于消息帧和TCP的通信机制,这个协议本身的目标是为了在http服务器上引入双向通信的机制,从而克服http单向通信的缺陷(http设计的初衷就不是为了双向通信),其可以在复用http的端口,支持http的代理,认证等,虽然如此,websocket可以独立于http存在。
|
7月前
|
Java API 数据安全/隐私保护
访问修饰符 public private protected 及默认情况的区别解析
在Java编程中,访问修饰符(`public`、`private`、`protected`和默认)用于控制类、方法、字段及构造函数的访问范围。`public`允许所有类访问;`private`仅限类内部访问;`protected`允许同一包内或子类访问;默认(无修饰符)仅限同一包内访问。通过合理使用这些修饰符,可实现数据封装、提高安全性和代码可维护性。了解它们的区别与应用场景,是掌握Java面向对象编程的关键。
1571 6
|
机器学习/深度学习 自然语言处理 文字识别
方案测评 | 多模态数据信息提取极速体验
多模态数据信息提取方案基于先进AI技术,能高效处理文本、图像、音频和视频等不同格式文件,提取有价值信息。该方案通过深度学习、自然语言处理等技术,实现结构化信息挖掘与分析,支持批处理模式,显著提高大规模数据处理效率,降低业务成本。用户可通过阿里云平台一键部署,无需数据搬运,确保高效安全的数据处理体验。此方案在性能和易用性上表现出色,具有广泛的应用价值和市场前景。
|
存储
TS 自定义结构Long与number类型相互转换
TS 自定义结构Long与number类型相互转换
515 0
|
移动开发 前端开发 数据安全/隐私保护
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
本文将以iOS技术博主身份,分享解决使用无密码的.p12文件发布应用时遇到的问题,并介绍如何以带密码的方式重新导出.p12文件的方法。通过本文提供的步骤,开发者可以顺利完成证书的发布流程。
|
编解码 监控 测试技术
优化OBS的推流设置以提高直播质量
优化OBS的推流设置以提高直播质量
2114 0
|
JavaScript
js监听页面或元素scroll事件,滚动到底部或顶部
js监听页面或元素scroll事件,滚动到底部或顶部
1659 0
js监听页面或元素scroll事件,滚动到底部或顶部
|
前端开发
前端轮询问题之为什么使用setTimeout可以保证轮询请求的唯一性
前端轮询问题之为什么使用setTimeout可以保证轮询请求的唯一性
268 0