• 0

String += appending ASCII value instead of char


Question

I've been experimenting with visual C++ having worked in Java for a while. Right now I'm working with a little String manipulation.

I have a Windows Form with a textBox that displays the value of a String. I'm trying to append a char to the String. The problem I'm having is the ASCII value of the String is appended instead of the char itself. So far I haven't been able to find a solution through the resources I've read. Here is an example:

String^ mystring;

char y = 'd';

mystring = "Test";

mystring += y;

textBox->Text = mystring;

The output is "Test100" instead of "Testd" (100 being the ASCII value of d). What should I be doing differently?

10 answers to this question

Recommended Posts

  • 0

I think you will need to do something like this:

mystring += "" + y;

I don't have a compiler in front of me, but you could also try casting y to a string e.g.:

mystring += (string) y;

EDIT: Whoops, just realised this is Visual C++, not C#. Not sure if either of these things will work.

  • 0

It may be that the reason you're seeing the decimal value instead of the ASCII character is because char is a decimal type. It is a decimal type just large enough to hold an ASCII character: 8-bits. Try referencing it as a pointer instead of a single character to make it a C-style string.

  • Like 1
  • 0

Is 'String' a Microsoft-centric data type or did you mistype the name of the standard 'string' class? The string class in the standard library can append single characters, C-style strings, and standard strings using the '+=' operator.

Without knowing the data type of 'textBox->Text', I'm assuming that something like the following will work:


std::string mystring;
char y = 'd';

mystring = "Test";
mystring += y;
textBox->Text = mystring.c_str();
[/CODE]

Alternatively, you could forgo the niceness of the string class and use only C-style strings. Your example would then look something like this:

[CODE]
char mystring[50];
char y = 'd';

strcpy( mystring, "Test" );
strncat( mystring, &y, 1 );
textBox->Text = mystring;
[/CODE]

  • Like 1
  • 0

String^ mystring;
char y = 'd';
mystring = "Test";
mystring += y;
textBox->Text = mystring;[/CODE]

This is C++/CLI. The caret "^" on a type name is not C++ syntax, it denotes a managed type, here System::String. If you want to learn C++, make sure you create an empty C++ project, not a "CLR" project. You won't be able to work directly with Winforms with C++; if working with Winforms is what you want, learn C# instead. I strongly doubt you want to learn C++/CLI, it is more complicated than you can imagine and it doesn't serve much purpose besides building bridges between the native and the managed world.

Anyway, with System::String you can't append a char to a string using the += operator, however you could call ToString() on the character and append that isntead, i.e.

[CODE]mystring += y->ToString();[/CODE]

But really, run from C++/CLI while there is still time. File -> New -> Project -> Visual C++ -> General -> Empty Project. Now you're doing real, ISO C++. It's complicated enough by itself.

  • 0

.NET uses unicode characters. Use wchar_t instead of char.

wchar_t y = L'd';[/CODE]

It most likely chooses int (System::Int32) as the closest conversion for char as a result, resulting in the decimal number.

If you really want to use char throughout your code, then you can do something similar to Dr_Asik's suggestion by using Convert::ToString:

[CODE]char y = 'd';
String ^value = Convert::ToString(y);[/CODE]

This link explains the mapping of types to the CLI: http://www.c-sharpcorner.com/uploadfile/b942f9/cppcli-for-the-C-Sharp-programmer/ , which is why it maps to a number rather than a character (it does not widen to the number, rather it widens to an integer).

  • Like 1
  • 0

Scrapped everything and redid the project in C#. Holy crap was it easier. I was thinking I could do it in C++ since that's what I used in college (command line progs only). That Visual C++/CLI stuff sucked. Knowing Java I was pretty much able to code in C# without having to look up much of anything. Came up with this little Class for creating a password:


class SecurePassword
{
private String password;
private int length;
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
Random random = new Random();
public void generatePassword(bool useUpper, bool useNumber)
{
char ch;
int i;
int type;
password = "";
for (i = 0; i < this.length; i++)
{
type = (random.Next(0, 4));
if (type == 0 && useUpper)
ch = getRandomUpperChar();
else if (type == 1 && useNumber)
ch = getRandomDigit();
else
ch = getRandomLowerChar();

password += ch;
}
}
public char getRandomDigit()
{
byte[] byteCh = new byte[4];
double range;
uint intCh;
rng.GetBytes(byteCh);
intCh = BitConverter.ToUInt32(byteCh, 0);
range = intCh / 4294967296.0;
intCh = (uint)(range * 10);
return Convert.ToChar(intCh + 48);
}
public char getRandomLowerChar()
{
byte[] byteCh = new byte[4];
double range;
uint intCh;
rng.GetBytes(byteCh);
intCh = BitConverter.ToUInt32(byteCh, 0);
range = intCh / 4294967296.0;
intCh = (uint)(range * 26);
return Convert.ToChar(intCh + 97);
}
public char getRandomUpperChar()
{
byte[] byteCh = new byte[4];
double range;
uint intCh;
rng.GetBytes(byteCh);
intCh = BitConverter.ToUInt32(byteCh, 0);
range = intCh / 4294967296.0;
intCh = (uint)(range * 26);
return Convert.ToChar(intCh + 65);
}
public String getPassword()
{
return password;
}
public void setLength(int len)
{
length = len;
}
}
[/CODE]

Had a little hiccup converting the byte array to a character in the range I wanted, Im sure my solution is a bit sloppy. I wanted to use the secure random methods instead of just Random.Next(min, max).

  • 0

Had a little hiccup converting the byte array to a character in the range I wanted, Im sure my solution is a bit sloppy. I wanted to use the secure random methods instead of just Random.Next(min, max).

Note: you're still using Random.Next(...) in your main loop.

Also, you could probably simplify the code a lot with your bytes-to-number conversion being extracted into a separate function.

private char getCharacter(uint start, uint range)
{
    byte[] bytes = new byte[1];

    // realistically, given the expected ranges (not even a full byte), you could use a single byte
    rng.GetBytes(bytes);

    return Convert.ToChar(start + bytes[0] % range);
}
[/CODE]

Any random lowercase character: [code]ch = getCharacter((uint)'a', 26);

Any random uppercase character:

ch = getCharacter((uint)'A', 26);

Any random number character:

ch = getCharacter((uint)'0', 10);

This topic is now closed to further replies.
  • Posts

    • DJI Neo 2 Fly More Combo gets a Prime Day exclusive pricing by Steven Parker DJI reached out to let us know that the DJI Neo 2 Fly More Combo has reached its lowest price ever ahead of Prime Day that starts tomorrow. This Fly More Combo kit adds two extra batteries, and a charge hub so you can charge all three at the same time, or keep two spares fully charged for quick swap and drone flying. (buying link below) Here are some of the important specifications: DJI Neo 2 Fly More Combo Dimensions: 147x171x41mm without DJI Neo 2 Digital Transceiver 167x171x54mm with DJI Neo 2 Digital Transceiver Takeoff Weight: 151 g without DJI Neo 2 Digital Transceiver 160 g with DJI Neo 2 Digital Transceiver Max Ascent Speed: 0.5 m/s (Cine mode) 3 m/s (Normal mode) 5 m/s (Sport Mode) Max Descent Speed: 0.5 m/s (Cine Mode) 3 m/s (Normal Mode) 3 m/s (Sport Mode) Max Horizontal Speed: 8 m/s (Normal Mode) 12 m/s (Sport Mode) 12 m/s (tracking status) Max Takeoff Altitude: 2000 m Max Flight Time: Approx. 19 minutes (approx. 17 minutes with the propeller guards) Each battery allows the drone to perform at least 20 palm takeoff and landing for shoots in succession Max Hovering Time: Approx. 18 minutes (16.5 minutes with the propeller guards) Max Flight Distance: 7 Km Max Wind Speed Resistance: 10.7 m/s (Level 5) Operating Temperature: -10° to 40° C (14° to 104° F) Global Navigation System: GPS + Galileo + BeiDou Hovering Accuracy Range: Vertical: ±0.1 m (with vision positioning) ±0.5 m (with satellite positioning) Horizontal: ±0.3 m (with vision positioning) ±1.5 m (with satellite positioning) Internal Storage: 49 GB Class: C0 (EU) Image Sensor: 1/2-inch CMOS Sensor Lens: FOV: 119.8° Format Equivalent: 16.5 mm Aperture: f/2.2 Focus: 0.7 m to ∞ ISO Range: Photo 100-3200 (Single Auto) 100-12800 (Burst Auto/Timed Auto) 100-12800 (Manual) Video 100-12800 (Auto) 100-12800 (Manual) Shutter Speed: Video: 1/8000-1/30 s Photo: 1/8000-1/10 s Max Image Size: 12 MP Photo 4000×3000 (4:3) 4000×2250 (16:9) Still Photography Modes: Single/Timed Shot Single Shot: 12 MP Timed Shot: 12 MP, 2/3/5/7/10/15/20/30/60 s Photo Format: JPEG Video Resolution: Horizontal Shooting: 4K (4:3*): 3840×2880@60/50/30fps 1080p (4:3*): 1440×1080@60/50/30fps 4K (16:9): 3840×2160@100**/60/50/30fps 1080p (16:9): 1920×1080@100**/60/50/30fps Vertical Shooting: 2.7K (9:16): 1512×2688@60/50/30fps Video features: MP4 Bitrate: 80 Mbps File System: exFAT Color Mode: Normal EIS: Supports RockSteady and turning stabilization off Gimbal: Stabilization: 2-axis mechanical gimbal (tilt, roll) Mechanical Range: Tilt: -125° to 105°, Roll: -43° to 43° Controllable Range: Tilt: -90° to 70° Max Control Speed (tilt): 100°/s Angular Vibration Range: ±0.01° Image Roll Correction: Supports correction of footage recorded on the drone. WiFi: 802.11a/b/g/n/ac/ax Bluetooth: 5.2 Battery: Capacity: 1606 mAh Weight: 46 g Nominal Voltage: 7.16 V Max Charging Voltage: 8.6 V Battery Type: Li-ion Chemical System: LiNiMnCoO2 Energy: 11.5 Wh Charging Temperature: 5° to 40° C (41° to 104° F) Charge time: When Using the Two-Way Charging Hub (65W): Approx. 68 mins to charge three batteries simultaneously from 0% to 100% When Directly Charging the Aircraft Body (15W): Approx. 70 minutes to charge from 0% to 100% (MSRP) Price: $349 As such, you have everything you need to get started right in the box, including the two extra batteries, and a spare set of propellers should things go amiss with the original set of blades on the drone. Oh, the humanity! What's in the box? DJI Neo 2 Aircraft x 1; DJI Neo 2 Intelligent Flight Battery x 3 DJI Neo 2 Two-Way Charging Hub x 1; DJI Neo 2 Spare Propellers (Pair) x 1 DJI Neo 2 Spare Propeller Screw x 4; Screwdriver x 1 DJI Neo 2 Propeller Guard (Pair) x 1; DJI Neo 2 Gimbal Protector x 1 USB-C to USB-C Data Cable x 1 Having never had the chance to mess around with a drone myself, a few more highlights for this drone are listed below: Lightweight & Portable Design - Weighing just 151g and C0 certified, this compact drone features full-coverage propeller guards for safer, worry-free transport and flight. Palm Takeoff & Landing, Gesture Control - Enjoy easy palm takeoff and landing, plus intuitive gesture controls for hands-free operation and seamless flying experiences. Smooth & Reliable Tracking - ActiveTrack keeps your subject in focus, while Apple Watch lets you view live feed, check flight status, or use voice control to adjust tracking. Easy Moment Capture With SelfieShot - Snap memorable moments easily with SelfieShot, allowing quick and convenient selfies anytime with just a simple tap. All-Around Safety & Flexible Flight - Fly confidently with omnidirectional obstacle sensing and enjoy versatile flight for safer, more dynamic aerial adventures. 4K High-Quality Imaging - Capture every moment in stunning detail with 4K resolution, delivering crisp, lifelike photos and videos every time. Good to know DJI also notes on the Amazon sales page that due to platform compatibility issues, the DJI Fly app has been removed from Google Play. Visit the official DJI website to download the user manual and the latest DJI Fly app for a better experience. Which means you will have to sideload it on your Android. Where to buy DJI Neo 2 Fly More Combo for $349 at Amazon US The above price has been communicated to me as a Prime Day exclusive. As an Amazon Associate we earn from qualifying purchases.
    • Upgrade for cheap to Windows 11 Pro or Home Edition digital license by Steven Parker Today's highlighted deal comes via our Apps + Software section of the Neowin Deals store, where you can save up to 94% off on a Microsoft Windows 11 Home, or Pro digital license. Upgrade your computing experience with Windows 11 Pro. This cutting-edge operating system boasts a sleek new design and advanced tools to help you work faster and smarter. From creative projects to gaming and beyond, Windows 11 delivers the power and flexibility you need to achieve your goals. With a focus on productivity, the new features are easy to learn and use, enhancing your workflow and efficiency. Whether you're a student, professional, gamer, or creative, Windows 11 Home has everything you need to take your productivity to the next level. New interface. easier on the eyes & easier to use Biometrics login*.Encrypted authentication & advanced antivirus defenses DirectX 12 Ultimate. Play the latest games with graphics that rival reality. DirectX 12 Ultimate comes ready to maximize your hardware* Screen space. Snap layouts, desktops & seamless redocking Widgets. Stay up-to-date with the content you love & the new you care about Microsoft Teams. Stay in touch with friends and family with Microsoft Teams, which can be seamlessly integrated into your taskbar** Wake & lock. Automatically wake up when you approach and lock when you leave Smart App Control. Provides a layer of security by only permitting apps with good reputations to be installed Windows Studio Effects. Designed with Background Blur, Eye Contact, Voice Focus, & Automatic Framing Touchscreen. For a true mouse-less or keyboard-less experience TPM 2.0. Helps prevent unwanted tampering Windows 11 Pro also includes a number of productivity-focused features, such as the ability to snap multiple windows together and create custom layouts, improved voice typing, and a new, more powerful search experience. Personal and professional users will enjoy a modern and secure computing experience, with improved performance and productivity features to help users get more done. Only on Windows 11 Pro If you require enterprise-oriented features for your daily professional tasks, then Windows 11 Pro is a better option. Set up with a local account (only when set up for work or school) Join Active Directory/Azure AD Hyper-V Windows Sandbox Microsoft Remote Desktop BitLocker device encryption Windows Information Protection Mobile device management (MDM) Group Policy Enterprise State Roaming with Azure Assigned Access Dynamic Provisioning Windows Update for Business Kiosk mode Maximum RAM: 2TB Maximum no. of CPUs: 2 Maximum no. of CPU cores: 128 Good to know This license is for Windows 11 only. It is NOT intended to be used for upgrading Microsoft Office (MSO) included in Parallels Pro. However, it will still work with Parallels Pro and allow you to run Windows applications including MSO, but it DOES NOT include an upgrade MSO itself. It is still compatible with Microsoft Office ONLY if you have a separate license for it. Length of access: lifetime Redemption deadline: redeem your code within 30 days of purchase Access options: desktop Max number of device(s): 1 Version: Windows 11 Pro Updates included Queries on legality of this deal, here A Windows 11 Pro retail license normally costs $199, with Windows 11 Home usually costing $139 but you can pick either one up for just $9.97 for a limited time. For a full description, specs, and license info, click the link below. Get Windows 11 Pro for just $9.97 (was $199) Get Windows 11 Home for just $9.97 (was $139) Although priced in U.S. dollars, this deal is available for digital purchase worldwide. Support queries If you have queries or need support for any of the Neowin Deals, please use the contact form here. Neowin Deals are managed and sold by StackCommerce who represent Neowin on an affiliate basis. Why we post these deals We post these because we earn commission on each sale so as not to rely solely on advertising, which many of our readers block. It all helps toward paying staff reporters, servers and hosting costs. So for those that keep moaning and complaining, be thankful we're still online for you to even do that. Other ways to support Neowin Whitelist Neowin by not blocking our ads Create a free member account to see fewer ads Make a donation to support our day to day running costs Subscribe to Neowin - for $14 a year, or $28 a year for an ad-free experience Disclosure: Neowin benefits from revenue of each sale made through our branded deals site powered by StackCommerce.
    • Why say “Retarded” then? Lol 
    • If you don't care to read what I said, then you prove my point. Maybe written media is beyond your attention span. Titles are not summaries my friend.
  • Recent Achievements

    • Dedicated
      tuben earned a badge
      Dedicated
    • Week One Done
      mnsgroup earned a badge
      Week One Done
    • Conversation Starter
      sumytbe earned a badge
      Conversation Starter
    • One Year In
      B4dM1k3 earned a badge
      One Year In
    • One Year In
      DarkWun earned a badge
      One Year In
  • Popular Contributors

    1. 1
      +primortal
      519
    2. 2
      +Edouard
      205
    3. 3
      PsYcHoKiLLa
      97
    4. 4
      Michael Scrip
      82
    5. 5
      Steven P.
      68
  • Tell a friend

    Love Neowin? Tell a friend!