C语言 如何将%{v_扩展}转换为String

kx7yvsdv  于 2023-04-05  发布在  其他
关注(0)|答案(2)|浏览(140)

我有一个dart:ffi结构体,它包含指向Char和int len的指针

class UnnamedStruct1 extends ffi.Struct {
  external ffi.Pointer<ffi.Char> ptr;

  @ffi.Int()
  external int len;
}

它应该表示一个String(稍后解析为Uri),如何将其转换为字符串

8zzbczxx

8zzbczxx1#

您可以创建一个函数将UnnamedStruct1示例转换为Dart String

String unnamedStruct1ToString(UnnamedStruct1 struct) {
  // Cast the pointer to a Pointer<Uint8>
  ffi.Pointer<ffi.Uint8> uint8Pointer = struct.ptr.cast<ffi.Uint8>();

  // Create a Dart String from the Utf8 encoded data
  String result = ffi.Utf8.fromUtf8(uint8Pointer, struct.len);

  return result;
}

void main() {
  // Assuming you have an instance of UnnamedStruct1 called myStruct
  UnnamedStruct1 myStruct = // ... initialize your struct here

  // Convert the struct to a Dart String
  String myString = unnamedStruct1ToString(myStruct);

  // Print the resulting string
  print(myString);
}

这个应该可以了

icomxhvb

icomxhvb2#

@mozzarella建议的here方法fromUtf8已被弃用
cast()目标类型错误(应为Utf8,而不是Uint 8)
“多谢,多谢,多谢,多谢。
我会等一等再接受任何东西因为有可能
.cast<Utf8>()会爆炸

class UnnamedStruct1 extends ffi.Struct {
  external ffi.Pointer<ffi.Char> ptr;

  @ffi.Int()
  external int len;
}

final UnnamedStruct1 struct = //...
final string = struct.ptr
        .cast<Utf8>()
        .toDartString(length: struct.ref.uri.len);

相关问题