You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符串转换为Cairo中的felt(域元素)?

在JavaScript中将字符串转换为Cairo的felt类型

Cairo要求所有数据都以field element(即felt)形式存在,要在JavaScript里把字符串转成felt,核心是将字符串编码为符合Cairo字段取值范围的数值,以下是几种实用实现方式:

1. 基础UTF-8编码转换

将字符串转为UTF-8字节数组,再把字节数组转换为大整数,得到对应的felt值:

function stringToFelt(str) {
  const encoder = new TextEncoder();
  const bytes = encoder.encode(str);
  const hexStr = Array.from(bytes).map(byte => byte.toString(16).padStart(2, '0')).join('');
  const felt = BigInt(`0x${hexStr}`);
  return felt.toString();
}

// 示例
console.log(stringToFelt("Hello Cairo"));

2. 超长字符串拆分转换

如果字符串长度超过单个felt的容纳上限(通常对应约31个UTF-8字符),需要拆分后转为多个felt:

function longStringToFelts(str, chunkSize = 31) {
  const encoder = new TextEncoder();
  const bytes = encoder.encode(str);
  const felts = [];
  
  for (let i = 0; i < bytes.length; i += chunkSize) {
    const chunk = bytes.slice(i, i + chunkSize);
    const hexStr = Array.from(chunk).map(byte => byte.toString(16).padStart(2, '0')).join('');
    felts.push(BigInt(`0x${hexStr}`).toString());
  }
  
  return felts;
}

// 示例
console.log(longStringToFelts("这是一段较长的测试字符串,用于演示拆分转换为多个felt的逻辑"));

关键注意事项

  • 转换后的数值必须在Cairo所使用的Prime Field最大值范围内,避免溢出
  • 若需要反向转换(felt转字符串),需保持编码解码逻辑一致

内容的提问来源于stack exchange,提问作者shramee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:40:49