Thread overview
August 04

How exactly can one store the string representation of a BigInt? The seemingly obvious

//...
dchar[] ret; //dchar[] is necessary for my project
//Assume that val is a BigInt with a value set earlier:
val.toString(ret, "%d");
//...

doesn't work. I am using x86_64 windows with -m64, and v2.100.1(LDC2 1.30.0).

August 03
On Thu, Aug 04, 2022 at 12:45:44AM +0000, Ruby The Roobster via Digitalmars-d-learn wrote:
> How exactly can one store the string representation of a BigInt?  The seemingly obvious
> 
> ```d
> //...
> dchar[] ret; //dchar[] is necessary for my project
> //Assume that val is a BigInt with a value set earlier:
> val.toString(ret, "%d");
> //...
> ```
> 
> doesn't work.  I am using x86_64 windows with -m64, and v2.100.1(LDC2
> 1.30.0).

Don't call .toString directly. Instead, use std.format.format:

```d
import std;
void main() {
	auto x = BigInt("123123123123123123123123123123123123");
	string s = format("%s", x); // this gives you the string representation
	writeln(s); // prints "123123123123123123123123123123123123"

	// If you need to convert to dchar[]:
	dstring ds = s.to!(dchar[]);

	// Or if you want a direct formatting into dchar[] without going
	// through a string intermediate:
	auto app = appender!(dchar[]);
	app.formattedWrite("%s", x");
	dchar[] dcharArray = app.data; // now you have your dchar[]
}
```

Hope this is clear.


T

-- 
Which is worse: ignorance or apathy? Who knows? Who cares? -- Erich Schubert
August 04

On Thursday, 4 August 2022 at 00:45:44 UTC, Ruby The Roobster wrote:

>

How exactly can one store the string representation of a BigInt? The seemingly obvious:
dchar[] is necessary for my project.
Assume that val is a BigInt with
a value set earlier:

val.toString(ret, "%d");

doesn't work.

I guess I wrote the following anything like that you want.

void main()
{
  import std.bigint,
         std.string : representation;

  BigInt i = 1001;
  auto val = i.to!(dchar[]);
  assert(val.representation == [49, 48, 48, 49]);
}

Is that what you want?

SDB@79

August 04
On Thursday, 4 August 2022 at 01:05:31 UTC, H. S. Teoh wrote:
>
> Don't call .toString directly. Instead, use std.format.format:
>
> ```d
> import std;
> void main() {
> 	auto x = BigInt("123123123123123123123123123123123123");
> 	string s = format("%s", x); // this gives you the string representation
> 	writeln(s); // prints "123123123123123123123123123123123123"
>
> 	// If you need to convert to dchar[]:
> 	dstring ds = s.to!(dchar[]);
>
> 	// Or if you want a direct formatting into dchar[] without going
> 	// through a string intermediate:
> 	auto app = appender!(dchar[]);
> 	app.formattedWrite("%s", x");
> 	dchar[] dcharArray = app.data; // now you have your dchar[]
> }
> ```
>
> Hope this is clear.
>
>
> T

Thank you.  This worked.
August 04

On Thursday, 4 August 2022 at 01:32:15 UTC, Salih Dincer wrote:

>

I guess I wrote the following anything like that you want.

void main()
{
  import std.bigint,
         std.string : representation;

  BigInt i = 1001;
  auto val = i.to!(dchar[]);
  assert(val.representation == [49, 48, 48, 49]);
}

Is that what you want?

SDB@79

Not exactly. Anyways, it has already been solved.